Advertisement

MYSQL----哈希索引

阅读量:

MYSQL----哈希索引

什么是哈希索引
1.哈希索引基于哈希表实现,只精确匹配索引所有列的查询时才有效。对于存储引擎都会对每一个索引列计算一个hash值,并且不同键值的行计算出来的hash值也不同(注意这里只行与行之间完全不同,只有有一个地方不同,他的hash值就不同,它将哈希码存储在索引中,同时在哈希表中保存指向每一个数据行的指针,注意时指向的指针而非具体的值,且hash值时顺序的,从小到大不一定连续),像下表这样子

槽(slot) 值(value)
2458 某某表中的第二行

在MYSQL中只有Memory引擎显式支持哈希索引

下面我们来看一个例子,且假设转换哈希值的函数是f()

复制代码
    `CREATE TABLE testhash(fname varchar(50)not null,lname varchar(50)not null,KEY USING HASH(fname))ENGINE=MEMORY;`
复制代码
    select lname from testhash where fname='peter';
  • 他会先f('peter')算出对应的hash值再在索引表中查找8784,就可以找到指向的哪一行,最后比较那一行的值是否为peter
    • InnoDB引擎有一种特殊的功能叫做自适应哈希索引,当某些索引被使用的非常频繁时,他会在内存中基于B-Tree索引之上再创建一个哈希索引,让它具有一些哈希索引的优点。这是一个自动的行为,用户无法控制,但是可以完全关闭该功能
    • 如果存储引擎不支持哈希索引 我们可以模拟像InnoDB一样创建哈希索引,就如同新增一个索引字段,当然也得在表里新增一个字段来存放哈希值,注意这里避免使用MD5或者sha1因为他们很长 可以考虑用crc32

全部评论 (0)

还没有任何评论哟~