MySQL架构

逻辑架构图:

大概分为四层,这个见仁见义,有不同的分法:

  

  • 第一层Connectors:处理不同语言与SQL的交互

  • 第二层Connection Pool :连接池,管理缓存用户连接,线程处理等需要缓存的需求

  • 第三层Managerment Services & Utilities :系统管理和控制工具

  • 第四层 SQL Interface下的不同储存引擎的库:接受sql命令,到不同的库查询数据

执行流程图

 

和上面的逻辑架构图结合,说说比较容易理解的东西:

Paeser :解析器,见名知意,就是解析sql的一个模块,主要的功能:

  • 对sql语句进行解析,分解成数据结构,然后有针对性的转发给不同的模块进行处理

Optimezer:查询优化器

  • 这个mysql自带的一个优化机制,在查询之前会自动的对我们的sql语句进行优化

Cache和Buffer:查询缓存

  • 在我们select数据后,会将结果集cache到缓存中,在表中数据没有变化是,作为缓存一直有效,当表中数据发生变更,自动失效

储存引擎接口:

  • 可插拔储存引擎,你可以把它想象成一根又一根的内存条,代表不同的储存引擎,可以拔下来,也可以插上去,每个开发者都可以根据自己的意愿来开发,提一句:储存引擎是基于单表的,而不是基于数据库的,在创建表的时候可以指定,默认是InnoDB

储存引擎

show engines :查看储存引擎

写写日常使用的两种存储引擎 :MyISAM 和 InnoDB

MyISAM是之前的版本,也是ISAM的变更版本,支持表锁,不支持事务,读取特别快使用

InnoDB是5.5版本之后默认的存储引擎,支持表锁,行锁,支持事务,或许就是为了弥补MyISAM不支持事务和外键的产生的吧

  

  

MySQL的物理结构之日志文件

mysql是通过文件系统对数据进行管理的,从文件上可以分为日志文件和数据文件

我们先说日志文件,这个还是比较重要的:

  • 日志文件包括:错误日志,查询日志,慢查询日志,二进制日志,中继日志等...

错误日志:err log

  • 默认是开启的,且在5.5.7后无法关闭,记录启动和关闭已经运行过程中发生的错误信息 :hostname.err

二进制日志 :bin log

  • 这个也很重要,主要做数据恢复,和用于实现mysql的主从复制

  • 需要通过配置 log-bin=mysql-bin进行开启:mysql-bin-000001,=.log

  • bin log记录了数据所有的ddl和dml语句,但不包括select语句内容,以顺序保存,描述了数据的变更顺序,对于灾难恢复至关重要

通用查询日志:general query log

  • 记录所有的CRUD,并发情况下数据量惊人,默认关闭,不做理会

慢查询日志

  • 默认是关闭的,slow_query_log=ON开启,定义:long_query_time ,可收集查询耗时超过该时间的sql语句,便于后续优化

中继日志

  • 在主从复制的环境下产生的日子,主要作用有接收主机饭来的同步数据便于从机做同步支撑

MySQL的物理结构之数据文件

查看MySQL的数据文件 : show variables like '%datadir%';

在给出的路径下,有以下几种文件类型:

  • .frm文件:主要存放与表相关的数据信息,主要包括表结构的定义信息

  • .ibd和.ibdata文件:用来存储InnoDB存储引擎的表数据和索引信息

  • .myd文件:主要用来存储使用MyISAM存储引擎的表数据信息。

  • .myi文件:主要用来存储使用MyISAM存储引擎的表数据文件中任何索引的数据树。

MySQL索引

  • 索引的作用: 优化查询速度,是一种特殊的数据结构 比如B+ Tree,他们包含对表中对应添加了索引的记录的引用指针,书页和书的关系,索引是在储存引擎中实现的,也就是说不同的储存引擎会有不同的索引

MyISAM和InnoDDB讲解:这两个使用的都是B+ Tree

索引的分类

单列索引:

  • 普通索引:MySQL中基本索引类型,没有什么限制,允许在定义索引的列中插入重复值和空值,纯粹为了查询数据更快一点。

    eg:create index index_name on table(colume(length))

    alter table table_name add index index_name on(column(length))

  • 唯一索引:索引列中的值必须是唯一的,但是允许为空值

    eg:create unique index index_name on table(column(length))

  • 主键索引:是一种特殊的唯一索引,不允许有空值

组合索引:在表中多个字段组合上创建的索引,想使用索引,需遵循最左前缀原则

  • 全文索引: 只能在MyISAM引擎中使用,且只能char varchar text类型字段上使用

  • 空间索引:一般不会使用,不晓得;

删除索引:

  • drop index index_name on table;

索引的储存结构:B Tree 和 B+ Tree

树的高度一般都是在2-4这个高度,树的深度影响 IO 读写的次数,影响性能

B Tree 和 B+ Tree最大区别在于:非叶子节点是否储存数据 B Tree的叶子和非叶子节点都会储存数据

B+ Tree 只有叶子节点才会储存数据,非叶子节点储存指针,指向另一个装载数据的容器

非聚集索引:

  • 叶子节点只会储存数据行的指针,简单来说就是真是数据不在叶子节点上,在其他地方

  • 主键索引和辅助索引都会储存指针的值

聚集索引:

  • 主键索引的节点会储存数据行,也就是数据和索引实在一起的

MySQL架构和索引的更多相关文章

  1. MySQL提升课程 全面讲解MySQL架构设计-索引

    索引是什么? 索引是帮助MySQL高效获取数据的数据结构. 索引能干什么? 提高数据查询的效率. 索引:排好序的快速查找数据结构!索引会影响where后面的查找,和order by 后面的排序. 一. ...

  2. MySQL架构和MySQL索引

    1.  MySQL架构 1.1         逻辑架构图 1.1.1   Connection Pool: 连接池 * 管理缓冲用户连接,线程处理等需要缓存的需求. * 负责监听对 MySQL Se ...

  3. MySQL架构优化实战系列1:数据类型与索引调优全解析

    一.数据类型优化 数据类型 整数   数字类型:整数和实数 tinyint(8).smallint(16).mediuint(24).int(32).bigint(64) 数字表示对应最大存储位数,如 ...

  4. 步步深入:MySQL架构总览->查询执行流程->SQL解析顺序

    前言: 一直是想知道一条SQL语句是怎么被执行的,它执行的顺序是怎样的,然后查看总结各方资料,就有了下面这一篇博文了. 本文将从MySQL总体架构--->查询执行流程--->语句执行顺序来 ...

  5. ch2 MySQL 架构组成

    第 2 章 MySQL 架构组成 前言 麻雀虽小,五脏俱全.MySQL    虽然以简单著称,但其内部结构并不简单.本章从 MySQL 物理组成.逻辑组成,以及相关工具几个角度来介绍    MySQL ...

  6. mysql笔记01 MySQL架构与历史、Schema与数据类型优化

    MySQL架构与历史 1. MySQL架构推荐参考:http://www.cnblogs.com/baochuan/archive/2012/03/15/2397536.html 2. MySQL会解 ...

  7. 理解MySQL——架构与概念

    写在前面:最早接触的MySQL是在三年前,那时候MySQL还是4.x版本,很多功能都不支持,比如,存储过程,视图,触发器,更别说分布式事务等复杂特性了.但从5.0(2005年10月)开始,MySQL渐 ...

  8. MySQL 架构

    原文:MySQL 架构 MySQL架构和结构分析 官方架构图: MySQL DB 各模块架构图如下: MySQL安装方式 MySQL初始化 简介:什么是事务: 事务: ACID :  事务确保了银行不 ...

  9. MySQL架构优化:定时计划任务与表分区

    转自: MySQL架构优化实战系列3:定时计划任务与表分区 - 今日头条(TouTiao.com)http://toutiao.com/a6304736482361049345/?tt_from=mo ...

随机推荐

  1. 2018年初面试Java(1.5年经验)

    xml文档如何解析 控制反转如何实现 http://www.cnblogs.com/qf123/p/8602972.html struts2和springmvc的区别 http://www.cnblo ...

  2. C语言之内存分配函数

    #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { /********* ...

  3. How to enter special characters like “&” in oracle database? [duplicate]

    SQL> set define off; or use Try 'Java_22 '||'&'||' Oracle_14'

  4. CSIC_716_20191129【面向对象高级----反射、类的内置方法(魔法方法)、单例模式】

    反射 反射是通过'字符串'对 对象的属性进行操作,反射有四个内置的方法. hasattr 通过字符串 判断对象的属性或者方法是否存在 getattr 通过字符串  获取对象的属性或者方法        ...

  5. JavaWeb学习篇之----web应用的虚拟目录映射和主机搭建(Tomcat)

    从今天开始来学习JavaWeb的相关知识,之前弄过一段时间JavaWeb的,就是在做毕业设计的时候搞过,但是那时候完全是为了任务去学习,所以效果不好,好多东西都没有深入的研究过,所以接下来的一段时间我 ...

  6. NX二次开发-UFUN求两个向量的叉乘UF_VEC3_cross

    NX9+VS2012 #include <uf.h> #include <uf_ui.h> #include <uf_vec.h> #include <uf_ ...

  7. 执行SQL语句---INSERT/UPDATE/DELETE

    1.执行SQL语句函数: int mysql_query(MYSQL* mysql, const char * query); query:所有的sql语句 2.例子: 向children表插入一条语 ...

  8. Lvs+keepalived+mysql(主从复制)

    1.准备环境 操作系统:centos 6.5 2台机器主机名为node53.node54     Mysql Lvs keepalived node2 Y Y Y node3 Y Y Y       ...

  9. CSS3:教程

    ylbtech-CSS3:教程 1.返回顶部 1. CSS3 教程 CSS 用于控制网页的样式和布局. CSS3 是最新的 CSS 标准. 本教程向您讲解 CSS3 中的新特性. 开始学习 CSS3! ...

  10. 7、postman的变量

    环境变量 环境变量顾名思义,我们可以设置测试环境和生产环境的变量. 比如我们设置测试环境的某个变量值为A,但是生产环境的为B,这个时候就可以用到环境变量.当然我们也可以不用环境变量,直接手动改,不过试 ...