1.哈希索引 :(hash index)基于哈希表实现,只有精确匹配到索引列的查询,才会起到效果。
对于每一行数据,存储引擎都会对所有的索引列计算出一个哈希码(hash code),哈希码是一个
较小的整数值,并且不同键值的行计算出来的哈希码也不一样。

2.只有Memory存储引擎显式支持哈希索引,但是原理可以用在伪哈希索引上
表结构如下:

create table test_hash(
fname varchar(100) not null default '',
lname varchar(100) not null default '',
index using hash(fname)
) engine=memory
insert into test_hash values ('zhang','san'),('tao','shihan'),('li','si');

  

3.假设会有这样一个哈希函数f(),该返回下面的哈希码整数值
f('tao')=2323
f('zhang')=7437
f('li')=8784

4.一张哈希表,存储着对应关系,槽编号是循序的,值数据行不是
槽(Slot) 值(Value)
2323 指向第2行数据
7437 指向第1行数据
8784 指向第3行数据

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的哈希索引和原理研究测试的更多相关文章

  1. MySQL/MariaDB数据库的索引工作原理和优化

    MySQL/MariaDB数据库的索引工作原理和优化 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 实际工作中索引这个技术是影响服务器性能一个非常重要的指标,因此我们得花时间去了 ...

  2. MySql 自适应哈希索引

    一.介绍 哈希(hash)是一种非常快的查找方法,一般情况下查找的时间复杂度为O(1).常用于连接(join)操作,如Oracle中的哈希连接(hash join). InnoDB存储引擎会监控对表上 ...

  3. SQL Server2014 哈希索引原理

    SQL Server2014 哈希索引原理 翻译自:http://www.sqlservercentral.com/blogs/sql-and-sql-only/2015/09/08/hekaton- ...

  4. mysql性能优化之索引优化

    作为免费又高效的数据库,mysql基本是首选.良好的安全连接,自带查询解析.sql语句优化,使用读写锁(细化到行).事物隔离和多版本并发控制提高并发,完备的事务日志记录,强大的存储引擎提供高效查询(表 ...

  5. MySQL(二)索引背后的数据结构及算法原理

    本文转载自CodingLabs,原文链接 MySQL索引背后的数据结构及算法原理 目录 摘要 一.数据结构及算法基础 1. 索引的本质 2. B-Tree和B+Tree 3. 为什么使用B-Tree( ...

  6. 重新学习MySQL数据库4:Mysql索引实现原理

    重新学习Mysql数据库4:Mysql索引实现原理 MySQL索引类型 (https://www.cnblogs.com/luyucheng/p/6289714.html) 一.简介 MySQL目前主 ...

  7. mysql索引之一:索引基础(B-Tree索引、哈希索引、聚簇索引、全文(Full-text)索引区别)(唯一索引、最左前缀索引、前缀索引、多列索引)

    没有索引时mysql是如何查询到数据的 索引对查询的速度有着至关重要的影响,理解索引也是进行数据库性能调优的起点.考虑如下情况,假设数据库中一个表有10^6条记录,DBMS的页面大小为4K,并存储10 ...

  8. 面试官:聊一下你对MySQL索引实现原理?

    在数据库中,如果索引太多,应用程序的性能可能会受到影响,如果索引太少,又会对查询性能产生影响.所以,我们要追求两者的一个平衡点,足够多的索引带来查询性能提高,又不因为索引过多导致修改数据等操作时负载过 ...

  9. MySQL索引查询原理

    什么是索引? “索引”是为了能够更快地查询数据.比如一本书的目录,就是这本书的内容的索引,读者可以通过在目录中快速查找自己想要的内容,然后根据页码去找到具体的章节. 数据库也是一样,如果查询语句使用到 ...

随机推荐

  1. 利用bulk添加百万条数据,进行测试

    (1)连接数据库 public static void BulkToDB(DataTable dt) { //数据库连接 SqlConnection sqlCon = new SqlConnectio ...

  2. UWP开发---DIY星级评分控件

    一,需求来源 在开发韩剧TV UWP过程中,遇到了星级评分的控件问题,在安卓和html中很容易用现有的轮子实现星级评分,搜索了一下目前UWP还未有相关文章,在WPF的一篇文章中使用Photo shop ...

  3. TCP BBR - 一键安装最新内核并开启 TCP BBR

    原文地址: https://teddysun.com/489.html 最近,Google 开源了其 TCP BBR 拥塞控制算法,并提交到了 Linux 内核,从 4.9 开始,Linux 内核已经 ...

  4. TCP BBR - 一键开启脚本

    这是秋水逸冰提供的TCP BBR一键开启脚本,脚本详细说明地址: https://teddysun.com/489.html 按照说明操作就可以了,注意问题:这个脚本获取有的时候可能有问题,如果提示脚 ...

  5. 守护进程与Supervisor

    博客链接:http://www.cnblogs.com/zhenghongxin/p/8676565.html 消息队列处理后台任务带来的问题 在系统稍微大些的时候,我们经常会用到消息队列(实现的方式 ...

  6. 弦论(tjoi2015,bzoj3998)(sam(后缀自动机))

    对于一个给定长度为\(N\)的字符串,求它的第\(K\)小子串是什么. Input 第一行是一个仅由小写英文字母构成的字符串\(S\) 第二行为两个整数\(T\)和\(K\),\(T\)为0则表示不同 ...

  7. jzoj5931

    根據打表可得,對於n的情況 任意一個首位!=1的排列時,則其答案-1可以與首位為1的情況對應 當n=4時 排列 答案 1 2 3 4 ------ 0 1 2 4 3 ------ 1 1 3 2 4 ...

  8. 扩展中国剩余定理(扩展CRT)详解

    今天在$xsy$上翻题翻到了一道扩展CRT的题,就顺便重温了下(扩展CRT模板也在里面) 中国剩余定理是用于求一个最小的$x$,满足$x\equiv c_i \pmod{m_i}$. 正常的$CRT$ ...

  9. 【learning】 单调队列与单调栈用法详解

    1.单调栈 单调栈是指一个栈内部的元素具有严格单调性的一种数据结构,分为单调递增栈和单调递减栈. 其具有以下两个性质: 1,满足栈底到栈顶的元素具有严格单调性. 2,满足栈的先进后出特性,越靠近栈顶的 ...

  10. linux 目录结构+常用命令+压缩命令+vim使用+及基础知识

    linux目录架构 / 根目录 /bin 常用的命令 binary file 的目录 /boot 存放系统启动时必须读取的档案,包括核心 (kernel) 在内 /boot/grub/menu.lst ...