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