mysql查询优化方案

mysql查询优化方案

  • 对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引
  • in ,not in会全表扫描
  • 模糊查询也会全表扫描:select id from t where name like '%abc%'
  • 并不是所有索引对查询都有效,SQL是根据表中数据来进行查询优化的,当索引列有大量数据重复时,SQL查询可能不会去利用索引,如一表中有字段sex,male、female几乎各一半,那么即使在sex上建了索引

limit结合order by查询优化

  • 慢查询示例
select * from table where deleted_at = ? and owner_id = ? order by status, id desc limit ?
  • 优化查询示例
select * from table no1 join(select id from table where deleted_at = ? and owner_id = ? order by status, id desc )  no2 on no1.id=no2.id limit ?;
  • 对比分析

使用上面这种写法的原因:原始的“select * from table where deleted_at = ? and owner_id = ? order by status, id desc limit ?” 会先读索引,再读数据,然后抛弃不需要的数据;而第二种写法只读索引,使用了主键索引,然后根据索引读取需要的列,效率更高

原文地址:https://www.cnblogs.com/javallh/p/12859627.html