- 避免使用OR操作
WHERE从句中条件包含OR操作那么SQL语句将不使用索引,可以使用IN运算符来替换,或是通过UNION连接两条SELECT语句。
- 避免UNION运算符的不必要使用
对同一张表的两次相邻扫描。
- 避免使用NOT运算符
WHERE从句中条件包含NOT运算符,那么SQL语句将不使用索引,可以通过比较运算符来代替。
- 隔离条件中的列
WHERE从句中条件等号两边相匹配:
SELECT *
FROM PLAYERS
WHERE JOINED + 10 =1990 => WHERE JOINED = 1980
- 使用BETWEEN运算符
通过AND运算符查看某个特殊范围值的WHERE从句一般不会使用索引,换成BETWEEN。
- 避免LIKE运算符的特殊形式
在LIKE行上的索引不被考虑。
- 向连接添加冗余条件
SELECT PAYMENTNO, NAME
FROM PENALTIES AS PEN, PLAYERS AS P
WHERE PEN.PLAYERNO = P.PLAYERNO
AND PEN.PLAYERNO = 44
添加:
AND P.PLAYERNO = 44
- 避免HAVING从句
尽可能在WHERE语句中指定条件而不是在HAVING子句中,不能用索引。
- 尽可能使SELECT从句小一些
如果子查询使用EXIST运算符链接到了主查询,但是该SELECT语句的最终结果不受制定表达式的影响,重新表述SELECT从句中由常量组成的唯一表达式。
- 避免DISTINCT
- 使用集合运算符的ALL选项
- 使用外连接而不是UNION运算符
- 避免数据类型转换最后指定最大的表
- 避免ANY和ALL运算符
使用聚合函数MIN,MAX来替换。