本文主要是介绍聚簇索引、非聚簇索引、回表、索引下推、覆盖索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
聚簇索引(主键索引)
非叶子节点上存储的是索引值,叶子节点上存储的是整行记录。
非聚簇索引(非主键索引、二级索引)
非叶子节点上存储的都是索引值,叶子节点上存储的是主键的值。非聚簇索引需要回表,IO消耗。
回表
非聚簇索引先执行一次主键查询,再通过适配的主键的值之后,再进行一次二级索引,这个过程就是回表。
覆盖索引
一次索引就可以得到数据,无需回表。覆盖索引发生在联合索引,where条件遵循最左匹配原则,order by条件需要满足联合索引所有条件,否则产生回表,这个IO消耗非常大。
索引下推
发生在联合索引,多个字段进行联合索引的时候,遵循最左匹配原则,只是在索引上进行匹配,也就是说不会产生回表,通常发生在like语句,查询计划,Using index condition就是索引下推技术。
经验:优化mysql的时候,当遇到至少百万级表的数据的情况下,通过减少回表次数来优化sql语句是一种常用的手段之一,只要保证正确使用联合索引那么效率自然不会低下。
这篇关于聚簇索引、非聚簇索引、回表、索引下推、覆盖索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!