在不同的表中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;