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

2020-03-16  本文已影响0人  魅猫之

MySQL查询优化器的局限性

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

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

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

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

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

优化特定类型的查询

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

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

尽可能使用关联查询代替

尽可能采用标识列分组

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

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

上一篇 下一篇

猜你喜欢

热点阅读