sql優化面試

1. exists 和in 的區別

當外查詢的數據大時,子查詢中的記錄較少時,用in;先查詢子句,然後把外表一條條的與已得到的查詢結果匹配,這個時候子查詢還會重新運行一遍;

當子查詢的記錄較多,外查詢的數據較少時,用exists;先對外表做loop循環, 把外表的每一行與子表的查詢去匹配,相當於兩個嵌套的for循環,得到了正確結果之後就返回相當於break;。

exists對外表做loop循環,in把內表外表做hash連接;

 

2. 儘量少使用* ,*號掃描所有字段

3. 儘量少使用%like,%在最前面會進行全局掃描;

4. having  和 where  

having 和where  都是增加查詢條件;

having  一般用於對於分組後 的語句查詢,where是普通的條件;

where只能對一條數據設置條件,而having是針對的一組;一般是先where過濾然後在使用having;

5. 儘量使用多表連接,避免子查詢

6.儘量在where後面 少用!= < >,這樣引擎放棄索引 進行全局掃描 ;

避免在where子句中進行函數操作;

7. from where     的子句執行順序都是從右往左,從下往上,所以

from  將表數據少的放後面,where條件篩選掉數據多的放後面,groupby 從左往右,放在where後面,

having 消耗資源較大,他是在檢出所有資源之後再使用的, 所以儘量少用,他是對最後的結果排序,或者對組添加條件;

8.

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章