MySQL Hash索引的应用与限制条件 |
本文标签:MySQL Hash索引 文章主要介绍的是MySQL Hash索引的实际应用,我们大家都知道在MySQL数据库中,只有Memory存储引擎显示支持hash索引,它是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引 。 Memory存储引擎支持非唯一MySQL hash索引,这在数据库领域是罕见的,如果多个值有相同的hash code,索引把它们的行指针用链表保存到同一个hash表项中 。 假设创建如下一个表:
包含的数据如下: 假设索引使用hash函数f( ),如下:
此时,索引的结构大概如下: Slots是有序的,但是记录不是有序的 。当你执行
MySQL会计算’Peter’的hash值,然后通过它来查询索引的行指针 。因为f(Peter) = 8784,MySQL会在索引中查找8784,得到指向记录3的指针 。 因为索引自己仅仅存储很短的值,所以,索引非常紧凑 。Hash值不取决于列的数据类型,一个TINYINT列的索引与一个长字符串列的索引一样大 。 Hash索引有以下一些限制: 1)由于索引仅包含hash code和记录指针,所以,MySQL不能通过使用索引避免读取记录 。但是访问内存中的记录是非常迅速的,不会对性造成太大的影响 。 2)不能使用MySQL hash索引排序 。 3)Hash索引不支持键的部分匹配,因为是通过整个索引值来计算hash值的 。 4)Hash索引只支持等值比较,例如使用=,IN( )和<=> 。对于WHERE price>100并不能加速查询 。
以上的相关内容就是对MySQL hash索引的介绍,望你能有所收获 。 |