軟件測試 |BTREE索引與HASH索引
2023-07-28 16:36 作者:測吧測試開發(fā) | 我要投稿
MEMORY 存儲引擎的表可以選擇使用 BTREE 索引或者 HASH 索引,兩種不同類型的索引各有其不同的適用范圍。HASH 索引有一些重要的特征需要在使用的時候特別注意,如下所示。
只用于使用=或<=>操作符的等式比較。
優(yōu)化器不能使用HASH索引來加速ORDER BY操作。
MySQL不能確定在兩個值之間大約有多少行。如果將一個MyISAM表改為HASH索引的MEMORY表,會影響一些查找的執(zhí)行效率。
只能使用整個關鍵字來搜索一行。
而對于BTREE索引,當使用>、<、>=、<=、BETWEEN、!=或者<>,或者LIKE'pattern'(其中‘pattern’不可以通配符開始)操作符時,都可以使用相關列上的索引。
下列范圍查詢適用于BTREE索引和HASH索引:
下列范圍查詢只適用于 BTREE 索引:
例如,創(chuàng)建一個和 city 表完全相同的 MEMORY 存儲引擎的表 city_memory:
當對索引字段進行范圍查詢的時候,只有 BTREE 索引可以通過索引訪問:
而 HASH 索引實際上是全表掃描的:
了解了 BTREE 索引和 HASH 索引不同后,當使用 MEMORY 表的時候,如果是默認創(chuàng)建的 HASH索引,就要注意 SQL 語句的編寫,確??梢允褂蒙纤饕?,如果一定要使用范圍查詢,那么在創(chuàng)建索引的時候,就應該選擇創(chuàng)建成 BTREE 索引。