索引的存储
B-Tree索引
innodb存储引擎使用的B+ Tree。每个叶子节点包含下一个叶子节点的指针,其所有的值都是有序存储,并且每个叶子节点至根节点的距离是相同的。
索引查询
保证按照索引的最左边前缀(leftmost prefix of the index)来进行查询(必须从索引的最左边的列开始,不能跳过索引列,不能使用索引中范围条件右边的列(eg:like))。
索引排序
- 按索引顺序扫描。多表查询且ORDER BY中所有列都是第个表的列,其他情况使用filesort。
- filesort。在内存中基于快速排序算法对数据进行排序:
- 两次扫描算法(Two Passes)。将需要排序的字段和对应行数据(第一次)的指针在内存(sort_buffer_size设定的大小)中进行排序,排序完成后据指针信息取出所有的列信息(第二次,I/O消耗大),内存消耗较小。
- 一次扫描算法(Single Passes)。直接将列数据取出在内存中进行排序。
通过max_length_for_sort_data和取出的最大字段的大小进行比较,如果大于max_length_for_sort_data则选择第一种算法,反之则选择第二种算法。
聚簇索引
inno