Sql優化,面試經驗總結


(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  同表名

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM