美文网首页
第六章 查询性能优化(下)

第六章 查询性能优化(下)

作者: 魅猫之 | 来源:发表于2020-03-16 00:07 被阅读0次

    MySQL查询优化器的局限性

    • 关联子查询

    MySQL的关联子查询实现的很差,最好改成左外连接(LEFT OUTER JOIN)

    • UNION的限制

    UNION查询的数据会放到临时表中,所以无法使用索引优化,最好是在每个子查询中带上查询条件

    • 松散索引扫描(跳跃索引扫描skip index scan)

    比如有索引(a,b),where b between 2 and 4,因为索引是有序的,在a相同的情况下,按照顺序取b的数据,不需要where子句过滤(MySQL目前不支持)

    • 最大值和最小值的优化

    如果聚合的列不是索引列,那将会全表扫描

    • 在同一个表上查询和更新

    不要使用子查询,改用INNER JOIN

    优化特定类型的查询

    • COUNT()的作用
    1. 统计行数 2.统计列值的数量
      如果是统计行数的话,最好用COUNT(*)
      优化:使用近似值、汇总表
    • 优化关联查询

    确保ON或者USING子句中的列上有索引
    确保任何的GROUP BY和ORDER BY中的表达式都来自同一个表

    • 优化子查询

    尽可能使用关联查询代替

    • 优化GROUP BY和DISTINCT

    尽可能采用标识列分组

    • 优化LIMIT分页

    尽可能使用覆盖索引,先从索引中取到具体分页主键,再关联查询出具体行的数据

    • 优化UNION查询

    MySQL总是通过创建并填充临时表的方式来执行UNION查询
    优化:在每个子查询中带上查询条件
    如果不是必须要消除重复行,那就使用UNION ALL

    相关文章

      网友评论

          本文标题:第六章 查询性能优化(下)

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