SQL优化规则_06_Classic相关 - 02

在不同的表中GROUP BY或ORDER BY

  • Content:这将强制使用临时表和filesort,可能产生巨大性能隐患,并且可能消耗大量内存和磁盘上的临时空间。
  • Case:
select tb1.col, tb2.col from tb1, tb2 where id=1 group by tb1.col, tb2.col

ORDER BY语句对多个不同条件使用不同方向的排序无法使用索引

  • Content:ORDER BY子句中的所有表达式必须按统一的ASC或DESC方向排序,以便利用索引。
  • Case:
select c1,c2,c3 from t1 where c1='foo' order by c2 desc, c3 asc

请为GROUP BY显示添加ORDER BY条件

  • Content:默认MySQL会对’GROUP BY col1, col2, …’请求按如下顺序排序’ORDER BY col1, col2, …’。如果GROUP BY语句不指定ORDER BY条件会导致无谓的排序产生,如果不需要排序建议添加’ORDER BY NULL’。
  • Case:
select c1,c2,c3 from t1 where c1='foo' group by c2

ORDER BY的条件为表达式

  • Content:当ORDER BY条件为表达式或函数时会使用到临时表,如果在未指定WHERE或WHERE条件返回的结果集较大时性能会很差。
  • Case:
select description from film where title ='ACADEMY DINOSAUR' order by length-language_id;

GROUP BY的条件为表达式

  • Content:当GROUP BY条件为表达式或函数时会使用到临时表,如果在未指定WHERE或WHERE条件返回的结果集较大时性能会很差。
  • Case:
select description from film where title ='ACADEMY DINOSAUR' GROUP BY length-language_id;
    原文作者:在水一方_Eric
    原文地址: https://www.jianshu.com/p/0ef86f138fe5
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞