(1)列優先
如圖有表A和表B
對其查詢時,會有如下語句:
select a.*,b.* from a,b where a.id = b.a_id;
注意from 后邊的表名,
a.如果多表查詢是完全無關系的話,將記錄和列名最少的表(from后靠右的位置接列少的表),寫在最后,然后依次類推
b.如果多表查詢是有關系的話,將引用最多的表(from后靠右的位置接列多的表),放在最后,然后依次類推
這樣速度會有所提高.
(2)where子句中的連接順序(where也采用從右往左解析)
當使用where子句連接的時候,要將可以過濾掉最大數量記錄的條件寫在WHERE子句的最右
例如
select emp.empno,emp.ename,emp.sal,dept.dname
from emp,dept
where (emp.deptno = dept.deptno) and (emp.sal > 1500)
這樣,可以過濾掉大量數據后,在執行其他條件,可以提高效率
(3)減少使用 * 代替列名
select * from user;
要寫成 select userID ,userName,userSalary from user;
因為使用* ,數據庫還得查詢數據字典,然后解析列名,直接寫列名會調高效率.
(04)刪除所有記錄都得時候,用TRUNCATE替代DELETE
因為delete刪除表時,會掃描整個表,然后再一條一條刪除
而TRUNCATE table user; 是一次性刪除整個表的所有內容,會提高效率.
(05)盡量多使用COMMIT
因為COMMIT會釋放回滾點 callback
(06)用WHERE子句替換HAVING子句
WHERE先執行,HAVING后執行
因為having會先分組,比較占內存.
(07)多使用內部函數提高SQL效率
例如多用concat連接,代替'||' 的符號連接
(08)表明過長時,盡量使用表的別名
例如 salgrade s 長表名更加的耗費掃描時間
(09)使用列的別名
例如 :ename e 同表名