MySQL中的回表和索引覆盖示例详解 |
索引类型聚簇索引: 叶子节点存储的是行记录,每个表必须要有至少一个聚簇索引 。使用聚簇索引查询会很快,因为可以直接定位到行记录 聚簇索引递推规则:
索引结构id 是主键,所以是聚簇索引,其叶子节点存储的是对应行记录的数据 非聚簇索引(Non-ClusteredIndex) 聚簇索引查询 如果查询条件为主键(聚簇索引),则只需扫描一次B+树即可通过聚簇索引定位到要查找的行记录数据 。 如: 非聚簇索引查询如果查询条件为普通索引(非聚簇索引),需要扫描两次B+树,第一次扫描通过普通索引定位到聚簇索引的值,然后第二次扫描通过聚簇索引的值定位到要查找的行记录数据 。 如:
先通过普通索引的值定位聚簇索引值,再通过聚簇索引的值定位行记录数据,需要扫描两次索引B+树,它的性能较扫一遍索引树更低 。 索引覆盖只需要在一棵索引树上就能获取SQL所需的所有列数据,无需回表,速度更快 。 例如: 使用id,age,name查询:
增加表的联合索引: explain分析:此时字段age和name是组合索引idx_age_name,查询的字段id、age、name的值刚刚都在索引树上,只需扫描一次组合索引B+树即可,这就是实现了索引覆盖,此时的Extra字段为Using index表示使用了索引覆盖 。 分页查询(非利用索引): 添加索引之后,即可实现利用索引快速查找 。 总结到此这篇关于MySQL中回表和索引覆盖的文章就介绍到这了,更多相关MySQL回表和索引覆盖内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! |