带你玩转MySQL,索引揭秘,看我是如何让你的查询性能指数提升的( 二 )

一个优化:覆盖索引:如果要查询的字段全在索引上,那么不需要回表
以items表中的idx_items_price_created_at索引使用举例:
# sql1:由于需要所有的字段,该查询在根据idx_items_price_created_at找到id后,还需要根据id再找items表中该条记录的其他字段的值select * from items where price = "20" and created_at = '2020-01-04';?# sql2: 由于需要的字段在索引上都有,该查询只需要在idx_items_price_created_at索引表找到记录直接返回即可select price, created_at, idwhere price = "20" and created_at = '2020-01-04';小结通过本章学习,我们了解到索引其实就是一个有序排列的表,我们通过有序排列的优势来加快查询 。也正是由于索引是有序排列的,如果想有效使用索引,我们就需要要遵循最左匹配原则 。我们还了解到覆盖索引,如果查询的字段全在索引上,可以减少一次回表查询,利用该特性在大批量查询时可以大幅度优化性能 。
本章所讲的内容全是以数据全在内存中为前提的,但是真实场景中数据都是在硬盘中保存,如果一个表中的数据可能有好几G,我们不可能把所有的数据都加载到内存然后进行二分搜索,所以下次我会讲一讲索引和硬盘的关系 。




推荐阅读