MySQL Hash索引的应用与限制条件

文章主要介绍的是MySQL Hash索引的实际应用,我们大家都知道在MySQL数据库中,只有Memory存储引擎显示支持hash索引,它是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引。

Memory存储引擎支持非唯一MySQL hash索引,这在数据库领域是罕见的,如果多个值有相同的hash code,索引把它们的行指针用链表保存到同一个hash表项中。

假设创建如下一个表:

 
 
 
 
  1. CREATE TABLE testhash (  
  2. fname VARCHAR(50) NOT NULL,  
  3. lname VARCHAR(50) NOT NULL,  
  4. KEY USING HASH(fname)  
  5. ENGINE=MEMORY

包含的数据如下:

假设索引使用hash函数f( ),如下:

 
 
 
 
  1. f('Arjen') = 2323  
  2. f('Baron') = 7437  
  3. f('Peter') = 8784  
  4. f('Vadim') = 2458  

此时,索引的结构大概如下:

Slots是有序的,但是记录不是有序的。当你执行

 
 
 
 
  1. mysql> SELECT lname FROM testhash WHERE fname='Peter'

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索引的介绍,望你能有所收获。

【编辑推荐】

  1. MySQL数据库安全设置的操作流程
  2. 实现MySQL 用户密码的设置步骤
  3. MySQL使用方法汇总描述
  4. MySQL mysqldump命令的正确应用
  5. MySQL移植问题的正确解决方案的描述
THE END