索引失效原理你真的懂了嗎?

2021-10-21 11:40:58 字數 742 閱讀 7045

兄弟萌在學習 mysql 索引機制時,想必都聽說過索引失效的幾大場景吧。

但是光背是沒有用的,你真的了解了它們為什麼會失效嗎?下面我們具體分析一下索引失效原理。

1. 為什麼違反最左字首法,索引會失效?

答:如果不遵循最左字首法則,相當於把 a 乾掉了,那麼在沒有 a 的情況下,b 肯定是無序的,因為 b 有序的條件是 a 相等的情況下。這時在無序的 b+ 樹上找到需要的值就用不到索引,只能進行全表掃瞄。

2. 為什麼範圍查詢的右邊為什麼索引會失效,如:explain select * from user where a>1 and b=1?

答:查詢 a>1 & b=1 的資料,我們首先根據這個 a 的索引順序能找到 a 大於 1 的這些資料,然後再去找 b = 1 的資料,這時發現 a>1 對應的這些 b 的資料是無序的,所以右邊的索引失效了。

3. 為什麼以 % 開頭的 like 模糊查詢,索引會失效?

答:如果 %a,去查詢以 a 結尾的字串,可以看到字串尾部是沒有順序的,所以查詢時只能進行全表掃瞄,就用不到索引。

Spring Context 你真的懂了嗎

今天介紹一下大家常見的乙個單詞 context 應該怎麼去理解,正確的理解它有助於我們學習 spring 以及計算機系統中的其他知識。我們經常在程式設計中見到 context 這個單詞,當然每個人有每個人的理解,它被理解為 上下文 容器等等。我想說的是,context 理解為上下文最為合適。為什麼呢...

php isset函式的功能,你真的懂了嗎

php的內建函式有很多,很多函式一看它們的名字就能臆想出來它們大概的意思。但是正是我不負責任的自以為是,沒有實際去查php的操作手冊造成了我對 錯誤的理解。下面這段 讓我意識到了isset不止我認為的判斷變數是否定義的意思。foreach array as k v array作為乙個陣列,它的元素能...

聯合索引失效原理

參考 單值索引在b 樹的結構裡,乙個節點只存乙個鍵值對 開局一張圖,由資料庫的a欄位和b欄位組成乙個聯合索引。從本質上來說,聯合索引也是乙個b 樹,和單值索引不同的是,聯合索引的鍵值對不是1,而是大於1個。a,b 排序分析 a順序 1,1,2,2,3,3 b順序 1,2,1,4,1,2 大家可以發現...