• 能够快速缩小结果集的 WHERE 条件写在前面,如果有恒量条 件,也尽量放在前面 ,例如 where 1=1
(这个我觉得顺序没有太大关系)
• 避免使用 GROUP BY、DISTINCT 等语句的使用,避免联表查询和子查询
使用GROUP BY时,建议在建索引时考虑GROUP BY后面字段的顺序,减少排序,与 Order By类似,都可以利用索引来排序
DISTINCT注意使用,后面的所有字段去重
• 能够使用索引的字段尽量进行有效的合理排列
适量建索引,过多也会产生问题,如:导致占有内存过多,Buffer_Pool占用
• 针对索引字段使用 >, >=, =, <, <=, IF NULL 和 BETWEEN 将会 使用索引,如果对某个索引字段进行 LIKE 查询,使用 LIKE ‘%abc%’ 不能使用索引,使用 LIKE ‘abc%’ 将能够使用索引
使用的时候尽量使用Explain分析一下是否真用上了(一般很准确的)
• 如果在 SQL 里使用了 MySQL部分自带函数,索引将失效
因为带函数了,谁知道你想咋转换,咋玩的,导致全表扫描,针对的是左边字段的函数,还有类型转换也会导致索引失效
• 避免直接使用 select *,只取需要的字段,增加使用覆盖索引使用的可能
注意覆盖索引,数据数量大,效果很明显
• 对于大数据量的查询,尽量避免在 SQL 语句中使用 order by 字句
用的时候注意利用索引,来减少排序
• 连表查询的情况下,要确保关联条件的数据类型一致,避免嵌套子查询
数量大的时候注意是否创建被驱动表的的索引 (INL)
• 对于连续的数值,使用 Between 代替 In
在数据范围连续的情况,推荐使用Between
• 对于Exist和In的的使用需要注意实际业务数据大小
In的内表全扫描,Exist外表全扫描。 外表小时用exist,内表小时用in。核心是尽量扫描小的数据,将大的数据使用索引
• where 语句中尽量不要使用 CASE 条件
会导致sql复杂,且不宜理解
• 当只要一行数据时使用 LIMIT 1