MySQL中的B-Tree索引

不问归期 提交于 2019-11-30 05:54:10

索引类型


在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只能使用索引的第一列。
  • 如果查寻中有某个列的范围(模糊)查询,则其右边所有列都无法使用索引优化查找。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!