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


  本文标签: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索引

以上的相关内容就是对MySQL hash索引的介绍,望你能有所收获  。