mysql 设置 hash 索引_MySQL中的自适应哈希索引

众所周知,InnoDB使用的索引结构是B+树,但其实它还支持另一种索引:自适应哈希索引。

哈希表是数组+链表的形式。通过哈希函数计算每个节点数据中键所对应的哈希桶位置,如果出现哈希冲突,就使用拉链法来解决。更多内容可以参考 百度百科-哈希表

a3e7b6a6a7a16b5397e60712924fbff5.png

从以上可以知道,哈希表查找最优情况下是查找一次.而InnoDB使用的是B+树,最优情况下的查找次数根据层数决定。因此为了提高查询效率,InnoDB便允许使用自适应哈希来提高性能。

可以通过参数 innodb_adaptive_hash_index 来决定是否开启。默认是打开的。

mysql> show variables like "innodb_adaptive_hash_index";+----------------------------+-------+

| Variable_name | Value |

+----------------------------+-------+

| innodb_adaptive_hash_index | ON |

+----------------------------+-------+

存储引擎会自动对个索引页上的查询进行监控,如果能够通过使用自适应哈希索引来提高查询效率,其便会自动创建自适应哈希索引,不需要开发人员或运维人员进行任何设置操作。

自适应哈希索引是对innodb的缓冲池的B+树页进行创建,不是对整张表创建,因此速度很快。

可以通过查看innodb的status来查看自适应哈希索引的使用情况。

mysql>show engine innodb status \G*************************** 1. row ***************************Type: InnoDB

Name:

Status:=====================================

2019-03-07 23:37:23 0x7f1f2d34c700INNODB MONITOR OUTPUT=====================================Per second averages calculatedfrom the last 6seconds------------------------------------------------------INSERT BUFFER AND ADAPTIVE HASH INDEX-------------------------------------Ibuf: size1, free list len 0, seg size 2, 0merges

merged operations:

insert0, delete mark 0, delete 0discarded operations:

insert0, delete mark 0, delete 0Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)

Hash table size34679, node heap has 0buffer(s)0.00 hash searches/s, 0.00 non-hash searches/s-------------------------------END OF INNODB MONITOR OUTPUT============================

可以看到自适应哈希索引大小,每秒的使用情况。

注意从哈希表的特性来看,自适应哈希索引只能用于等值查询,范围或者大小是不允许的。

等着查询: select * from xx where name = "xxx";

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值