mysql逻辑架构:

图一:
图片说明
图二:
图片说明
图一和图二相比之下,个人感觉图一更好理解一点,图二好像更专业的样子,哈哈。
mysql的DML、DDL、存储过程、视图、触发器在服务层实现,索引在存储引擎层实现。
mysql存储引擎是插拔式的、也可以自定义存储引擎。不同存储引擎操作表的方式不同。mysql现在默认的存储引擎是innoDB,支持事务,外键,行级锁等,而mylSAM不支持这些可以通过show engines命令进行简单查看存储引擎对比:
图片说明
由上图可以看出不同存储引擎的区别,不同存储引擎层面的索引的数据结构不同,比如MEMORY存储引擎是基于哈希的,优点在于精确匹配,但是在处理排序和范围查询时就无能为力。
这里我们只讨论innoDB存储引擎。
innoDB的逻辑存储结构如下:
图片说明
表空间--->段--->区(最大为1M)--->页(单页最大为16K)--->行;
可以得出一个区最多只有64个页,页是innoDB操作的基本单位。
索引分类:
1按照功能进行分类(不是今天讨论的重点):主键索引、唯一索引、全文索引、普通索引
2:聚簇索引、非聚簇索引(二级索引)
innoDB操作的每张表都有一个也仅有一个聚簇索引。
聚簇索引的选出规则为:优先选用主键索引,若没有主键索引,则会选择第一个唯一索引(好像对这个唯一所有还有其他限制,在官方文档中有标识出),若也没有唯一索引,则会为每一张表生成一个伪列,这个伪劣建立了聚簇索引。
聚簇索引和非聚簇索引主要区别在索引b+树的叶子节点可以得出。聚簇索引叶子节点下面还挂着整行数据,而非聚簇索引只是挂着这行数据的主键。另外innoDB底层是B+树是优化后的b+树,所有的叶子节点构成一条循环双向链表,所有记录都存储在叶子节点,所以查询效率很稳定。支持范围查询和排序,这个相比hash作为索引存储结构就友好多了。
B树特点:m阶B树每个节点最多只有m-1个key,最多只有m个指针,构建市向上提取父节点。
B+树特点,所有索引值都不会在叶子节点中体现,叶子节点构成一条单链表。