資料庫索引失效原則

2022-09-19 05:57:08 字數 1117 閱讀 6072

6字口訣:

模型數空運最快

下面我帶領大家快速複習一下這句口訣,然後針對網友們的一些疑問做乙個簡要的回答。

模型數空運最快,字面意思就是運送乙個模型,要用飛機空運,不要用陸運和海運,數空運最快。口訣中的每乙個字都代表一種索引失效的型別。我逐個講解一下。

1. 模:代表模糊查詢。like的模糊查詢以%開頭,索引失效。

2. 型:代表資料型別。型別錯誤,如欄位型別為varchar,where條件用number,索引也會失效。

3. 數:代表函式。對索引的字段使用內部函式,索引也會失效。這種情況下應該建立基於函式的索引。

4. 空:是null的意思。索引不儲存空值,如果不限制索引列是not null,資料庫會認為索引列有可能存在空值,所以不會按照索引進行計算。

5. 運:代表運算。對索引列進行加、減、乘、除等運算,會導致索引失效。

6. 最:代表最左原則。在復合索引中索引列的順序至關重要。如果不是按照索引的最左列開始查詢,則無法使用索引。

7. 快:全表掃瞄更快的意思。如果資料庫預計使用全表掃瞄要比使用索引快,則不使用索引。

下面我針對朋友們的一些疑問和看法簡要回覆一下。

1. 了解了b+樹的原理,就不需要背這個索引失效的問題了。

關於這個說法我也贊同,但是需要弄清楚學習的物件是誰,我這個口訣主要是解決初學者面試時回答不上這個問題的情況的。如果是乙個初學者,讓他理解那麼底層的原理顯然是不現實的。而這個口訣恰恰能快速的解決面試回答不全的問題。

2. 裡面有一些是錯的,比如在新版的mysql上null情況也不會失效了。

這個確實是有一些特殊情況的,不同資料庫引擎,不同資料庫版本都有一些微小的差異。我們在實際專案工作中會遇到各種資料庫,各種版本。所以索引失效的情況還是盡量要了解完整,不要因為新版本改進了,就忘記舊版本的這種失效情況了。但我還是非常感謝提出這些差異的朋友,做技術就需要這種嚴謹的精神。

3. 索引失效這個說法不對,索引不會失效,是沒有使用到索引。

這個問題嚴格來說不算問題,索引失效是行業內約定俗成的叫法,你要是很認真的去研究用詞,還會有很多這樣的例子。比如說手機記憶體,到底是指手機的記憶體還是手機的硬碟呢?從字面理解手機記憶體是指手機的ram,但在實際生活中大家說手機記憶體其實都是指手機的儲存空間,手機上的硬碟。你非要因為這個和別人爭辯對錯就沒什麼意思了。

資料庫索引 索引失效

以下情況不走索引 select from student where name like xiaoyao select from student where not score 100 select from student where score 100 select from student w...

資料庫索引失效

索引失效 1 沒有查詢條件,或者查詢條件沒有建立索引 2 在查詢條件上沒有使用引導列 3 查詢的數量是大表的大部分,應該是30 以上。4 索引本身失效 5 查詢條件使用函式在索引列上 見12 6 對小表查詢 7 提示不使用索引 8 統計資料不真實 9 cbo計算走索引花費過大的情況。其實也包含了上面...

資料庫索引失效

作資料庫索引能起到優化資料庫查詢,提高查詢效率的作用。並且對也稍微大一點的資料量的服務來說,索引的建立是必須的,也是關鍵的。但是索引也要合理應用,不要遇到查詢就建索引,也不能亂建。如果造成索引失效那還不如不建。索引失效有的時候是因為自己的語句問題造成的。下面是幾種造成索引失效的幾種原因,一 以下的方...