MySQL 的 B-Tree 索引

大多数 MySQL 引擎都支持这种索引,但底层的存储引擎可能使用不同的存储结构,例如 NDB 使用 T-Tree,而 InnoDB 使用 B+ Tree。
InnoDB会显示BTree,但是实际上是B+Tree,可以理解为B+Tree是一种特殊的BTree

  • B+树所有值都是按顺序排列存储,每个叶子到根距离相同
  • 一般B+树的树高2层就够用
  • 遵循最左匹配
  • 查询中有范围查询,则无法使用索引,因为即使范围查询的字段有索引,但是其他字段上没有,会导致多次回表,所以会去使用全表扫描。

例如联合索引(id,name,sex),如果只使用 id 和 sex 。通常会说索引失效,但其实还是可以正常使用索引的。explain SQL语句之后可以看到extra列的值为Using index condition

Using index condition是5.6版本之后加入的新特性:Index Condition Pushdown。它会先按照条件过滤索引,过滤完之后找到所有符合索引的数据行,然后再用where中的其他条件去过滤

mysql explain using index condition
[mysql using index condition? - 陈浩的回答 - 知乎]
(https://www.zhihu.com/question/291390748/answer/1424116959)

posted @ 2022-03-11 14:22  张三丰学Java  阅读(86)  评论(0编辑  收藏  举报