数据库

 首页 > 数据库 > mariadb > MySQL数据库中hash索引的应用

MySQL数据库中hash索引的应用

分享到:
【字体:
导读:
         摘要:文章主要介绍的是MySQLHash索引的实际应用,我们大家都知道在MySQL数据库中,只有Memory存储引擎显示支持hash索引,它是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引。Memory存储引擎支持非唯一MySQLhash索引,这在数据库领域是罕见的,如果...

MySQL数据库中hash索引的应用
文章主要介绍的是MySQL Hash索引的实际应用,我们大家都知道在MySQL数据库中,只有Memory存储引擎显示支持hash索引,它是Memory表的默认索引类型,尽管Memory表也可以使用B-Tree索引。
Memory存储引擎支持非唯一MySQL hash索引,这在数据库领域是罕见的,如果多个值有相同的hash code,索引把它们的行指针用链表保存到同一个hash表项中。
假设创建如下一个表:
CREATE TABLE testhash (  
fname VARCHAR(50) NOT NULL,  
lname VARCHAR(50) NOT NULL,  
KEY USING HASH(fname)  
) ENGINE=MEMORY; 
包含的数据如下:
假设索引使用hash函数f( ),如下:
f('Arjen') = 2323  
f('Baron') = 7437  
f('Peter') = 8784  
f('Vadim') = 2458  
此时,索引的结构大概如下:
Slots是有序的,但是记录不是有序的。当你执行
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索引的介绍,望你能有所收获。

MySQL数据库中hash索引的应用
分享到:
MySQL数据库安装出错和无法启动的解决办...
MySQL数据库安装出错和无法启动的解决办法 以下的文章主要介绍的是MySQL 安装出错的实际解决方案,其中包括MySQL数据库的服务无法启动1067的实际解决方案,MySQL数据库的安装问题 The security setting could not be applied to the database的相关解决办法的介绍。 MySQL 安装出错: 1.MySQL服务无法启动1067...
MySQL与MariaDB的抉择
MySQL与MariaDB的抉择 2013年2月Oracle发布了MySQL 5.6正式版MySQL 5.6.10,这距离上一版本5.5发布已经过去两年。当初MySQL创始人Monty Widenius处于对Oracle治下MySQL前途的担心而离去,自己创立了开源数据库MariaDB。 当时的分析师就告诫Oracle的Larry,您应该把MySQL从游艇上扔下去。“MySQL是一个包袱,而...
  •         php迷,一个php技术的分享社区,专属您自己的技术摘抄本、收藏夹。
  • 在这里……