B-Tree 索引
Mysql 表结构原则
选择较小的数据类型
数据类型越小,占用磁盘、内存和 CPU 缓存更少,处理所需要的 CPU 周期也更少
整型比字符操作代价更低,因为字符集合校对规则使字符比较比整型比较更复杂
尽量避免 NULL
如果查询中包含为 null 的列,对 mysql 来说更难优化,因为 null 的列让索引、索引统计和值更复杂。可以为 null 的列会使用更多的存储空间,在 mysql 里需要特殊处理。当可为 null 的列被索引时,每个索引记录需要一个额外的字节,在 MyIsam 里甚至可能导致固定大小的索引变成可变长度的索引。
B-Tree 索引
Innodb 使用 B+Tree
MyIsam 使用前缀压缩技术使得索引更小,Innodb 按照原数据格式进行存储。
MyIsam 索引通过数据的物理位置引用被索引的行,Innodb 根据主键引用被索引的行。
B-Tree 所有的值都是按照顺序存储的,每个叶子页到根的距离相同。
B-Tree 索引能够加快访问数据的速度,因为存储引擎不再需要进行全表扫描来获取需要的数据,而是从索引的根节点开始搜索。根节点的槽中存储了指向子节点的指针,存储引擎根据这些指针向下层查找。通过比较节点页的值和要查找的值可以找到合适的指针进入下层子节点,这些指针定义了子节点页中值的上限和下限,最终存储引擎要么是找到对应的值,要么记录不存在。叶子节点比较特别,指针指向的是被索引的数据,而不是其他的节点
B-Tree 对索引列是顺序组织存储的,所以很适合查找范围数据。
索引对多个值进行排序的依据是 Create Table 语句中定义索引时列的顺序。
B-Tree 索引适合全键值、键值范围和键前缀查找,键前缀只适用于根据最左前缀来进行匹配查找。
全值匹配
全值匹配指的是和索引中的所有列进行匹配
B-Tree 索引的缺点
B-Tree 索引的缺点:
如果不是按照索引的最左列开始查找,无法使用索引。
不能跳过索引中的列
如果查询中某个列是范围查询,那么它右边所有列都无法使用索引优化查找。
版权声明: 本文为 InfoQ 作者【周杰伦本人】的原创文章。
原文链接:【http://xie.infoq.cn/article/59c723aa5182f4bbd61887121】。文章转载请联系作者。
评论