導致全表掃瞄的情況

2021-07-28 11:37:07 字數 767 閱讀 2634

1.查詢時沒有設定查詢條件。例如:select * from tablename;

2.查詢條件中不要使用in操作符。如果是聯絡範圍推薦可以是用between代替。

3.not in使用,not in不會走索引。

處理方式:用exists 或者外聯結 + 判斷為空代替

4.is null 或 is not null 會導致索引失效,引起全表掃瞄

5.查詢條件中使用了不等於操作符(<>,!=)導致索引失效

處理方式:將不等於操作符換成or

6.or使用不當導致索引失效。例如:where column1 < '1' or column2 >'3' 只有column1和column2都使用了索引,索引才會有效,否則導致索引失敗。

7.like使用不當。

解決辦法:首先盡量避免模糊查詢,如果因為業務需要一定要使用模糊查詢,則至少保證不要使用全模糊查詢,對於右模糊查詢,即like『…%』,是會使用索引的;左模糊like『%...』無法直接使用索引,但可以利用reverse + function index的形式,變化成like『…%』;全模糊是無法優化的,一定要的話考慮用搜尋引擎。出於降低資料庫伺服器的負載考慮,盡可能地減少資料庫模糊查詢。

8.select count(*) from table;這樣不帶任何條件的count會引起全表掃瞄,並且沒有任何業務意義,是一定要杜絕的。

9.sql的where條件要繫結變數,比如where column=:1,不要寫成where column=『aaa』,這樣會導致每次執行時都會重新分析,浪費cpu和記憶體資源。

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

不會使用索引,導致全表掃瞄情況

1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 在業務密集的sql當中盡量不採用in操作符 a 改為 a 4.is null 或is not null操作 判斷字段是否為空 5.及 操作符 大於或小於操作符 大於或小於操作符一般情況下是不用調整的,因為它有索引就會採用索引查詢,但有的情況...

不會使用索引,導致全表掃瞄情況

不會使用索引,導致全表掃瞄情況 1.不要使用in操作符,這樣資料庫會進行全表掃瞄,推薦方案 用not exists或者 外聯結 判斷為空 來代替 3 操作符 不等於 使用 同樣不會使用索引,因此對它的處理只會產生全表掃瞄 推薦方案 用其它相同功能的操作運算代替,如 a 0 改為 a 0 or a 0...