美文网首页
SQL 优化总结

SQL 优化总结

作者: 许忠钰的博客 | 来源:发表于2021-06-20 10:55 被阅读0次

1. 联合索引第一个字段就用范围查找不会走索引,mysql内部可能觉得第一个字段就用范围,结果集应该很大,回表效率不高,还不 如就全表扫描 范围查找需谨慎

虽然使用( force index)了强制走索引让联合索引第一个字段范围查找也走索引,扫描的行rows看上去也少了点,但是最终查找效率不一定比全表 扫描高,因为回表效率不高

加上其他索引条件 使用覆盖索引依然能够对sql使用效率进行优化

2. in和or在表数据量比较大的情况会走索引,在表记录不多的情况下会选择全表扫描

3.like KK% 一般情况都会走索引

索引下推(Index Condition Pushdown,ICP), like KK%其实就是用到了索引下推优化 什么是索引下推了? 对于辅助的联合索引(name,age,position),正常情况按照最左前缀原则,SELECT * FROM employees WHERE name like 'LiLei%' AND age = 22 AND position ='manager' 这种情况只会走name字段索引,因为根据name字段过滤完,得到的索引行里的age和 position是无序的,无法很好的利用索引。 在MySQL5.6之前的版本,这个查询只能在联合索引里匹配到名字是 'LiLei' 开头的索引,然后拿这些索引对应的主键逐个回表,到主键索 引上找出相应的记录,再比对age和position这两个字段的值是否符合。 MySQL 5.6引入了索引下推优化,可以在索引遍历过程中,对索引中包含的所有字段先做判断,过滤掉不符合条件的记录之后再回表,可 以有效的减少回表次数。使用了索引下推优化后,上面那个查询在联合索引里匹配到名字是 'LiLei' 开头的索引之后,同时还会在索引里过 滤age和position这两个字段,拿着过滤完剩下的索引对应的主键id再回表查整行数据。 索引下推会减少回表次数,对于innodb引擎的表索引下推只能用于二级索引,innodb的主键索引(聚簇索引)树叶子节点上保存的是全行数据,所以这个时候索引下推并不会起到减少查询全行数据的效果。

4. 为什么范围查找Mysql没有用索引下推优化? 估计应该是Mysql认为范围查找过滤的结果集过大,like KK% 在绝大多数情况来看,过滤后的结果集比较小,所以这里Mysql选择给 like KK% 用了索引下推优化,当然这也不是绝对的,有时like KK% 也不一定就会走索引下推。

优化总结: 1、MySQL支持两种方式的排序filesort和index,Using index是指MySQL扫描索引本身完成排序。index 效率高,filesort效率低。 2、order by满足两种情况会使用Using index。 1) order by语句使用索引最左前列。 2) 使用where子句与order by子句条件列组合满足索引最左前列。 3、尽量在索引列上完成排序,遵循索引建立(索引创建的顺序)时的最左前缀法则。 4、如果order by的条件不在索引列上,就会产生Using filesort。 5、能用覆盖索引尽量用覆盖索引 6、group by与order by很类似,其实质是先排序后分组,遵照索引创建顺序的最左前缀法则。对于group by的优化如果不需要排序的可以加上order by null禁止排序。注意,where高于having,能写在where中 的限定条件就不要去having限定了。

回表

相关文章

  • 17.MySQL优化

    《高性能MySQL》——这本书都有的 “字段”优化总结 “索引”优化总结 索引的优化 “查询SQL”优化总结 “引...

  • SQL 常用优化手段总结 - 索引的应用

    系列文章回顾SQL 常用优化手段总结 - 分析 SQL 语句的一般步骤SQL 常用优化手段总结 - 索引的应用SQ...

  • SQL 常用优化手段总结 - 分析 SQL 语句的一般步骤

    系列文章回顾SQL 常用优化手段总结 - 分析 SQL 语句的一般步骤SQL 常用优化手段总结 - 索引的应用SQ...

  • MySQL优化

    数据库SQL优化大总结之 百万级数据库优化方案

  • SQL优化

    SQL优化 在sql查询中为了提高查询效率,我们常常会采取一些措施对查询语句进行sql优化,下面总结的一些方法,有...

  • 常用sql优化2019-09-27

    sql优化 sql优化.................................................

  • sql优化总结

    SQL 性能优化 总结 (1)选择最有效率的表名顺序(只在基于规则的优化器中有效): ORACLE的解析器...

  • sql优化总结

    1.在where和order by 涉及的列上建立索引2.where中对null(空值)判断,否则导致引擎放弃索引...

  • SQL优化总结

    一、建立合适的索引 在常用过滤条件、表连接的字段建立索引。但并不是所有索引对查询都有效,MySQL如果扫描数据超过...

  • SQL 优化总结

    1. 联合索引第一个字段就用范围查找不会走索引,mysql内部可能觉得第一个字段就用范围,结果集应该很大,回表效率...

网友评论

      本文标题:SQL 优化总结

      本文链接:https://www.haomeiwen.com/subject/rnwdyltx.html