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

数据库 MySQL
今天我们要和大家一起分享的是文章主要介绍的是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索引的介绍,望你能有所收获。

【编辑推荐】

  1. MySQL数据库安全设置的操作流程
  2. 实现MySQL 用户密码的设置步骤
  3. MySQL使用方法汇总描述
  4. MySQL mysqldump命令的正确应用
  5. MySQL移植问题的正确解决方案的描述
责任编辑:佚名 来源: 互联网
相关推荐

2021-03-04 11:49:19

MySQL账号IP

2010-10-12 16:50:14

MySQL Hash索

2010-05-11 10:47:13

MySQL索引类型

2019-06-03 15:15:09

MySQL索引数据库

2010-05-28 11:14:39

MySQL全文索引限制

2024-04-01 07:53:51

MySQL索引字符

2017-07-17 09:29:41

MySQL索引测试

2017-07-11 09:22:23

MySQL索引测试

2017-08-02 14:02:42

MysqlMysql优化Mysql索引

2010-03-30 18:11:24

Oracle创建

2010-05-18 13:34:42

MySQL条件sele

2010-07-20 13:20:26

SQL Server聚

2017-07-25 12:07:14

MySQL索引SQL

2020-02-14 18:10:40

MySQL索引数据库

2010-05-26 13:42:08

MySQL数据库索引

2010-05-11 11:03:41

Mysql索引

2011-06-08 15:08:38

MySQLWhere优化

2009-04-30 09:45:03

Oracle索引限制

2010-05-20 15:00:00

2010-10-21 12:03:35

SQL Server视
点赞
收藏

51CTO技术栈公众号