MySQLHash索引和B树索引的区别
特殊的MySQL Hash索引结构,检索效率很高,检索可以定位,不像从根节点到节点B树索引,最后可以访问页面节点多IO访问,所以Hash索引的查询效率比B树索引高多了。许多人可能有疑虑。由于Hash索引比B更有效,你为什么不使用哈希索引B树索引事物都有两面性。散列索引也是相同的。哈希索引虽然效率高,但由于其特殊性,本身也带来了许多局限性和缺点。
(1)MySQL哈希索引只能满足
比较了hash哈希指数在哈希运算之后的哈希值,因此它只能用于等价过滤,不能用于基于范围的过滤,因为处理哈希算法后的哈希值对应的关系大小,不能保证运算和散列之前完全相同。
(2)MySQL哈希索引不能用来避免数据的排序。
由于hash散列索引在散列计算之后存储散列值,哈希值与哈希操作前的键值不完全相同,因此数据库不能使用索引数据避免任何排序操作。
(3)MySQL哈希索引不能用部分索引键查询。
对于复合索引,散列指数在计算hash值时是一个综合索引键,合并后计算哈希值,而不是计算散列值,因此通过一个或多个关键查询时间前面的复合索引,可以使用hash索引。
(4)MySQL哈希索引在任何时候都不能避免表扫描。
已经知道哈希索引是散列索引索引键。然后,哈希和相应的行指针信息的散列值的结果存储在哈希表中,由于不同的索引键具有相同的哈希值,所以即使遇到一个哈希键值的数据记录数,无法从哈希索引直接完成查询,或进行相应的比较访问表中的实际数据,并得到相应的结果。
(5)对MySQL Hash索引的性能不一定比B树索引时大量的哈希值相等。
对于索引较少的索引键,如果创建哈希索引,就会有大量与同一散列值相关联的记录指针信息。这样,定位记录非常麻烦,并且会浪费多个表数据的访问,从而导致整体性能低下。