1.可以通过调整 WHERE 子句中的连接顺序数据库管理系统采用自下而上的顺序解析 WHERE 子句,根据这个原理,表连接最好写在其他 WHERE 条件之前,那些可以过滤掉最大数量记录。
下面的 SQL 语句性能较差:
SELECT *
FROM Person
WHERE Salary > 50000
AND Position= ‘MANAGER’
AND 25 < (SELECT COUNT(*) FROM T_Manager
WHERE ManagerId=2)
;
把子查询的条件放到最前面,性能比较好:
SELECT *
FROM _Person
WHERE
25 < (SELECT COUNT(*) FROM Manager
WHERE FManagerId=2)
AND Salary > 50000
AND Position= ‘MANAGER’
;
2.用 Where 代替 HAVING
减少使用 HAVING,因为 HAVING 只会在检索出所有记录之后才对结果集
进行过滤。而通过 WHERE 子句限制记录的数目,那就能减少这方面的开销。
HAVING 一般用于聚合函数的过滤,除此而外,应该将条件写在 WHERE 子
句中。