共計 2074 個字符,預計需要花費 6 分鐘才能閱讀完成。
自動寫代碼機器人,免費開通
丸趣 TV 小編給大家分享一下 mysql 中 B 樹和哈希索引有什么區別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!
前言:了解 B 樹和哈希數據結構有助于預測查詢在這些使用不同索引數據結構的存儲引擎上的執行情況,特別是對于 MEMORY 存儲引擎, 它是允許您選擇 B 樹或哈希作為索引的存儲引擎。
1. B 樹指數特征
B 樹索引可以在使用表達式中使用的對列的比較 =,,=,,=,或 BETWEEN 關鍵字。如果使用 LIKE 或 to LIKE 且是一個不以通配符開頭的常量字符串,則索引也可用于比較。
1. 例如,以下 SELECT 語句將使用索引:
SELECT * FROM tbl_name WHERE key_col LIKE Patrick%
SELECT * FROM tbl_name WHERE key_col LIKE Pat%_ck%
在第一個語句中 Patrick = key_col Patricl , 在第二個語句中 Pat = key_col Pau
2. 以下 SELECT 語句不使用索引:
SELECT * FROM tbl_name WHERE key_col LIKE %Patrick%
SELECT * FROM tbl_name WHERE key_col LIKE other_col;
在第一個語句中,LIKE 值以通配符開頭。在第二個語句中,該 LIKE 值不是常量。
如果使用了像 %string% 且長度超過三個字符的字符串查詢, 那么 MySQL 將使用 Turbo Boyer-Moore 算法初始化這個模型, 用這個模型來匹配速度會更快.
不跨越子句中的所有 AND 級別的 任何索引 WHERE 不用于優化查詢。換句話說,為了能夠使用索引,必須在每個 AND 組中使用索引的前綴。
3. 以下 WHERE 子句使用索引:
WHERE index_part1=1 AND index_part2=2 AND other_column=3
/* index = 1 OR index = 2 */
WHERE index=1 OR A=10 AND index=2
/* optimized like index_part1= hello */
WHERE index_part1= hello AND index_part3=5
/* Can use index on index1 but not on index2 or index3 */
WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;
4. 這些 WHERE 子句 不使用索引:
/* index_part1 is not used */
WHERE index_part2=1 AND index_part3=2
/* Index is not used in both parts of the WHERE clause */
WHERE index=1 OR A=10
/* No index spans all rows */
WHERE index_part1=1 OR index_part2=10
有時 MySQL 不使用索引,即使有索引也是如此。發生這種情況的一種原因是,優化器估計使用索引將需要 MySQL 訪問表中非常大比例的行。(在這種情況下,表掃描可能會快得多,因為它需要的搜索次數較少。)但是,如果這樣的查詢: 例如 LIMIT 只用于檢索某些行,那么 MySQL 無論如何都會使用索引,因為它可以更快地找到在結果中返回幾行。
2. 哈希指數特征
散列索引與剛才討論的特征有些不同:
它們僅用于使用 = 或 = (文章結尾有此符號說明) 運算符的相等比較(但速度非常快)。它們不用于比較運算符,例如 找到一系列值。依賴于這種類型的單值查找的系統被稱為“鍵值存儲”; 要將 MySQL 用于鍵值查找類,請盡可能使用哈希索引。
優化器無法使用哈希索引來加速 ORDER BY 操作。(此類索引不能用于按順序搜索下一個條目。)
MySQL 無法確定兩個值之間大約有多少行(范圍優化器使用它來決定使用哪個索引)。如果將 MyISAM 或 InnoDB 表更改為哈希索引 MEMORY 表,則可能會影響某些查詢。
只有整個鍵可用于搜索行。(使用 B 樹索引,鍵的任何最左邊的前綴都可用于查找行。)
附錄
解釋 = 和 = 的區別:
相同點:像常規的 = 運算符一樣,兩個值進行比較,結果是 0(不等于)或 1(相等), 換句話說:’A =’B 得 0 和’a =’a‘得 1, 都是值的比較。
不同點:NULL 的值是沒有任何意義的。所以 = 號運算符不能把 NULL 作為有效的結果。所以:請使用 = , a = NULL 得 0 NULL = NULL 得出 1。和 = 運算符正相反,= 號運算符規則是 a =NULL 結果是 NULL 甚至 NULL = NULL 結果也是 NULL。順便說一句,mysql 上幾乎所有的操作符和函數都是這樣工作的,因為和 NULL 比較基本上都沒有意義。
用處當兩個操作數中可能含有 NULL 時,你需要一個一致的語句, 此時就可以用 = .
以上是“mysql 中 B 樹和哈希索引有什么區別”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注丸趣 TV 行業資訊頻道!
向 AI 問一下細節
丸趣 TV 網 – 提供最優質的資源集合!