回表的概念:回到主键索引树搜索的过程就是回表,有没有一种可能避免回表呢?
覆盖索引
如果执行语句查询的值已经在非主键索引树上了,那么我们就避免了回表的操作。覆盖索引可以减少树的搜索次数,显著提升查询性能,所以使用覆盖索引是一个常用的性能优化手段。
联合索引
联合索引是指对表上的多个列进行索引,本质的数据结构也是一颗B+树,不同的是该B+树上的键值对数量大于等于2.
对于是否要为两个或多个列建立联合索引要取决于需求是否频繁,如果要经常地查询多列之间的对应关系,那么联合索引就是必要的。它可以在这个高频请求上使用避免回表,提高执行效率。
最左前缀原则
B+ 树这种索引结构,可以利用索引的“最左前缀”,来定位记录。
首先索引项是按照索引定义里面出现的字段顺序排序的,索引可以根据你的查询条件快速定位到指定的索引项并向后遍历得到你想要的结果,所谓的最左前缀既可以是联合索引的字段也可以是字符串索引的字符。
那么,该如何安排索引内部的字段顺序呢?
原则是索引的复用性。第一原则是,如果通过调整顺序可以减少维护一个索引,那么这个顺序往往是需要优先考虑使用的。
如果既有联合查询,又有基于这两个列字段的各自查询,此时不得不建立一个联合索引和一个单独的索引,这是考虑的原则就是空间了。选择占内存尽可能小的索引。
索引下推
如果在查询时涉及到多个条件,根据最左前缀原则,索引只能找到满足第一个条件的记录,接着再判断其他条件是否满足, 下推优化可以在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。
MySql四:索引
于 2022-01-09 16:56:49 首次发布