全表掃描.定義
需要從全表掃描說起.
在數據庫中,對無索引的表進行查詢一般稱為全表掃描。
全表掃描是數據庫服務器用來搜尋表的每一條記錄的過程,直到所有符合給定條件的記錄返回為止。
這種效率是有點低的,那么怎么提高查詢速度呢?
索引.
旁白,這是一個LOL地圖 + 一個雷達圖的結合...
想象一下,LOL剛出來的時候,大家都是亂走位置,
根本沒有打野,大家抓人全靠運氣(如果那時候知道抓人)
全表掃描.結尾.何時有了索引還是會全表掃描
當我索引是擺設?
- 查詢語句使用了"Like"
對於LIKE '%xyz%'(全模糊)這樣的條件,是無法使用索引,
另外,由於匹配算法的關系,模糊查詢的字段長度越大,模糊查詢效率越低。
解決辦法:
首先盡量避免模糊查詢,如果因為業務需要一定要使用模糊查詢,則至少保證不要使用全模糊查詢.
對於右模糊查詢,即LIKE 'xyz%',是會使用索引的.
左模糊LIKE '%xyz'無法直接使用索引,但可以利用reverse + function index 的形式,變化成LIKE 'xyz%',
全模糊是無法優化的,一定要的話考慮用搜索引擎.出於降低數據庫服務器的負載考慮,盡可能地減少數據庫模糊查詢.
- where 子句中使用!=或<>操作符
- where 子句中使用or 來連接條件
- in 和not in 也要慎用
- where 子句中對字段進行表達式操作
- where子句中對字段進行函數操作
全表掃描.適用場景
- ※ 表很小,索引可能就比表還大
- ※ 訪問的數據占全表數據的百分比很大,索引訪問的總成本大於全表掃描的成本。
- ※ 相對於索引來說,表中的數據排列過於凌亂,表現出來就是索引的 clustering_factor 很大,導致索引的訪問成本劇增。