如何盡可能利用上索引
先where以後再關聯(減少關聯的資料量)
子查詢盡量不要放在被驅動表,有可能使用不到索引;
left join時,盡量讓實體表作為被驅動表。
能夠直接多表關聯的盡量直接關聯,不用子查詢
頻繁作為查詢條件的字段應該建立索引(where)
查詢中與其它表關聯的字段,外來鍵關係建立索引(關聯條件)
單鍵/組合索引的選擇問題, 組合索引價效比更高
查詢中排序的字段,排序欄位若通過索引去訪問將大大提高排序速度(排序)
查詢中統計或者分組字段(group by 或者 統計字段)
表記錄太少
經常增刪改的表或者字段
where條件裡用不到的字段不建立索引
過濾性不好的不適合建索引
復合索引遵循最佳左字首法則。
復合索引列上不能有範圍查詢
建議:將可能做範圍查詢的字段的索引順序放在最後
不要在索引列上做任何計算
不在索引列上做任何操作(計算、函式、(自動or手動)型別轉換),會導致索引失效而轉向全表掃瞄。
字串不加單引號,則會在name列上做一次轉換!
like的前後模糊匹配
使用不等於(!= 或者<>)的時候
mysql 在使用不等於(!= 或者<>)時,有時會無法使用索引會導致全表掃瞄
欄位的is not null 和 is null
減少使用or
使用union all或者union來替代
最左字首要遵守,範圍之後全失效;(復合索引)
索引列上少計算,var引號不可丟;(計算影響)
like百分寫最右,覆蓋索引不寫*;(4種情況)
不等空值還有or,索引影響要注意;
優化儲存過程7種方法
優化儲存過程有很多種方法,下面介紹最常用的7種。1.使用set nocount on選項 我們使用select語句時,除了返回對應的結果集外,還會返回相應的影響行數。使用set nocount on後,除了資料集就不會返回額外的資訊了,減小網路流量。2.使用確定的schema 在使用表,儲存過程,函...
sql優化的幾種方法
1.盡量不要使用 select from t 用具體的字段列表代替 不要返回用不到的任何字段。2.對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。3.應盡量避免在 where 子句中對字段進行 null 值判斷,否則將導致引擎放棄使用索引而進行...
SQL優化的幾種方法
1 盡量避免使用select 返回無用的字段會降低查詢效率。如下 select from test 優化方式 使用具體的字段代替 只返回使用到的字段。2 對查詢進行優化,應盡量避免全表掃瞄,首先應考慮在 where 及 order by 涉及的列上建立索引。3 盡量避免進行null值的判斷,會導致資...