索引类型在MySQL中,索引是在存储引擎层而不是服务器层实现的,故而没有统一的引擎标准:即同一种索引在不同存储器上的实现可能不一样。B-Tree索引:当人们谈论索引的时候,如果没有特别指出,多半讲的就
索引类型
在MySQL中,索引是在存储引擎层而不是服务器层实现的,故而没有统一的引擎标准:即同一种索引在不同存储器上的实现可能不一样。
B-Tree索引:
当人们谈论索引的时候,如果没有特别指出,多半讲的就是B-Tree索引。B-Tree意味着所有的值都是按顺序存储的,并且每一个叶子到根的距离相同。下图表反应了InnoDB的B-tree索引如何工作。
假如有以下表:
CREATE TABLE People ( last_name varchar(50) not null, first_name varchar(50) not null, dob date not null, gender enum('m', 'f') not null, key(last_name, first_name, dob));
对于表中的每条数据,索引如下
索引对多个值进行排序的依据是create table语句中定义索引时列的顺序。
B-Tree通常可以支持“只访问索引查询”,无需访问数据行。
因为索引树中的节点是有序的,所以除了按值查找之外,索引还可以用于查询中的order by操作。
T-Tree索引的限制:
- 如果不是按照索引的最左列开始查找,则无法使用索引。如上表中不能查找特定生日的人。
- 不能跳过索引中的列。如果不指定first_name,则MySQL只能使用索引的第一列。
- 如果查寻中有某个列的范围(模糊)查询,则其右边所有列都无法使用索引优化查找。