mysql 的优化,主要就是索引的优化。因而需要对索引的数据结构有一个了解。最常用的索引就是B+tree 索引,而且B+tree 是由Btree 演变而来。在讲解btree 之前,首先说一下系统对磁盘的读取。
计算机系统通过将磁盘的内容读入内存中然后才对数据进行操作。当然不可能将全部磁盘的内容读入内存。一般是以磁盘块的大小进行读入,也就是常说的IO操作。mysql 常用的数据库引擎 innodb则采用 页的方式进行磁盘读取。页,是一种磁盘管理的方式。所以通过减少IO操作,来提高数据库查询效率。
Btree 索引是一种数据结构。每个节点一般包括 键值、数据库记录除键值外的数据,指针(指向子节点的指针)。
B+tree 索引 的每个非叶子节点一般包括键值 ,指针,只有叶子节点才包括数据。
由于 Btree 索引 每个节点(一般每个节点对应于一个磁盘块)也存储数据,所以每个节点存储的键值会很少,导致需要很多节点,导致树的深度增加,而树的深度就是磁盘IO的次数,而B+tree 非叶子节点不存储数据,所以每个节点存储的键值相应的增多,从而树的深度降低,提高了查询效率。