[日常] MySQL的哈希索引和原理研究测试
1.哈希索引 :(hash index)基于哈希表实现,只有精确匹配到索引列的查询,才会起到效果。对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个较小的整数值,并且不同键值的行计算出来的哈希码也不一样。 2.只有Memory存储引擎显式支持哈希索引,但是原理可以用在伪哈希索引上表结构如下: 3.假设会有这样一个哈希函数f(),该返回下面的哈希码整数值f('tao')=2323f('zhang')=7437f('li')=8784
5.select lname from test_hash where fname='tao'G;mysql先计算'tao'的哈希值,f('tao')=2323,然后根据该值在哈希索引表中查找对应的行,找到它指向的是第2行数据,直接查询第2行数据,判断fname是tao,确保正确 6.哈希冲突:不同的值得到了相同的哈希码,例如f('tao')=2323 f('wang')=2323,此时就是出现了哈希冲突当出现哈希冲突时,相同的数据会存储在链表中,遍历链表找到符合的。 7.特点:1)哈希索引只包含哈希码和指针,不存储数据字段值2)哈希索引数据并不是按循序存储的,因此无法用于排序3)因为要通过查询值计算确定的哈希码,所以哈希索引不支持部分匹配,不支持范围查找,只支持等值比较查询4)当哈希冲突很多的时候,效率会降低 在InnoDB存储引擎上,可以基于上面的原理,实现伪哈希索引,配合默认的B-Tree索引 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Mysql必读CentOS 7中源码安装MySQL 5.7.6+详细教程
- mySQL数据库获取汉字拼音的首字母函数
- MYSQL数据库深入mysql主从复制延迟问题的详解
- MySQL:数据库入门篇1
- 如何将远程mysql数据库转储到我的本地机器?
- Mysql学习MySQL5.6 数据库主从同步安装与配置详解(Master/
- Mysql必读Mysql Explain 详细介绍
- Mysql入门MYSQL无法启动提示: Default storage engine (In
- mysql SELECT COUNT(*)… GROUP BY …不返回计数为零的行
- mysql – 使用SQLAlchemy创建表后,如何向其中添加其他列?