MySQL btree索引概述(3)

btree通常可以支持只访问索引的查询,即查询只需要访问索引,而无需访问数据行,即,这个就是覆盖索引的概念。需要访问的数据直接从索引中取得,这个是针对innodb中btree索引而言的。

因为索引树中的节点是有序的,所以除了按值查找之外,索引还可以用于查询中的order by操作,一般来说,如果btree可以按照某种方式查找的值,那么也可以按照这种方式用于排序,所以,如果order by子句满足前面列出的几种查询类型,则这个索引也可以满足��应的排序需求。

(二)下面是关于btree索引的限制:

1)如果不是按照索引的最左列开始查找的,则无法使用索引(注意,这里不是指的where条件的顺序,即where条件中,不管条件顺序如何,只要where中出现的列在多列索引中能够从最左开始连贯起来就能使用到多列索引)

2)不能跳过索引中的列,如创建了多列索引(姓,名,出生日期):查询条件为姓和出生日期,跳过了名字列,这样,多列索引就只能使用到姓这一列。

3)如果查询中有某个列的范围查询,则其右边所有列都无法使用索引优化查询,如:where last_name=xxx and first_name like ‘xxx%’ and dob=’xxx’;这样,first_name列可以使用索引,这列之后的dob列无法使用索引。

总结:mysql中常用的引擎有innodb和myisam,这两个引擎中创建的默认索引都是B-tree索引,而都是B+tree结构实现的,并且innodb和myisam具体叶子节点存储的内容有所不同,然后覆盖索引是针对innodb引擎的索引而言的,因为myisam引擎中b-tree索引的叶子节点存储的仅仅是行指针。

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/5f6cd8bcc5a5425429af2eeb14dc6190.html