mysql hash 索引 vs B-TREE 索引

转载 2013年12月01日 23:53:48

Terry Tsang

//我相信最有价值的东西,是很多人都应该因为它而一起学习和进步的!真正有价值的技术,都是值得和所有人分享的!

hash 索引

当前 memory 引擎, innodb 引擎支持 hash 索引, 索引将存放内存中. (innodb 存放 buffer pool)
innodb 启动 innodb-adaptive-hash-index 参数就能够支持

假设利用  show engine innodb status \G 看到大量类似下图的等待值 (参见 RW-latch 由 brt0sea.c 产生)

建议你使用 skip-innodb_adaptive_hash_index 关闭 innodb hash 索引功能.


索引由 HASH 算法获得, 因此不一定是唯一 HASH 值,需要对索引进行全扫描



如上图描述, 数据存放后,HASH 索引表中, 具有数据及 HASH 键专用存放的区间, 而每个HASH都与某个数据一一对应 (注:再强调一次不一定唯一哟)

B-TREE 索引

常用 Innodb 与 MyISAM 引擎都支持
在 Innodb里,有两种形态,
一是primary key形态, 其leaf node里存放的是数据,而且不仅存放了索引键的数据, 还存放了其他字段的数据.
二是secondary index, 其leaf node和普通的 B-TREE 差不多, 只是还存放了指向主键的信息.

而在MyISAM里,主键和其他的并没有太大区别!
不过和Innodb不太一样的地方是在MyISAM里, leaf node里存放的不是主键的信息, 而是指向数据文件里的对应数据行的信息.



用于条件判断比较

hash 索引只能够使用 = <> IN 等判断方法进行搜索, 对 order by 没有任何加速功能
B-TREE 索引可用于 =, >, >=, <, <=, BETWEE, 同样可以用于 like 操作

select * from t1 where name like 'Parti%'; (支持)
select * from t1 where name like 'Par%ti%'; (支持)
select * from t1 where name like '%Parti'; (不支持)

 

MySQL 5.6 新参数 --innodb-adaptive-hash-index 能够令 innodb 也具备 hash index 的特性

默认情况下  5.6 启用该功能, 但不一定能够获得好处, 因此 HASH 索引将会在 INNODB BUFFER 中占用一定的内存空间。

建议自行 BenchMark 一下启用及关闭时的性能再行决定。




相关文章推荐

高性能MySQL - 创建高性能的索引(上)(B-Tree,Hash)

前言索引在Mysql中也叫作‘键(key)’。 基本功能是用于存储引擎快速找到记录的一种数据结构。Question:使用ORM,是否还需要关心索引 即使使用对象关系映射(ORM)工具,仍然要理解索...

MySQL Hash索引和B-Tree索引的区别

MySQL Hash索引和B-Tree索引的区别究竟在哪里呢?相信很多人都有这样的疑问,下文对两者的区别进行了详细的分析,供您参考。 MySQL Hash索引结构的特殊性,其检索效率非常高,索引...

[数据库]MySQL Hash索引和B-Tree索引的区别

MySQL Hash索引和B-Tree索引的区别究竟在哪里呢?相信很多人都有这样的疑问,下文对两者的区别进行了详细的分析,供您参考。 MySQL Hash索引结构的特殊性,其检索效率非常高,索引...

Mysql的Hash索引与B-Tree索引

hash 索引 B-Tree索引
  • xyznol
  • xyznol
  • 2016年04月26日 18:24
  • 130

【MySQL索引】Hash索引与B-Tree索引 介绍及区别

转自:http://blog.sina.com.cn/s/blog_6776884e0100pko1.html 【摘要】       这是从《MySQL性能调优与架构设计》第六...
  • qbw2010
  • qbw2010
  • 2015年04月03日 11:43
  • 316

MySQL索引-Hash索引与B-Tree索引 介绍及区别

1. Hash索引       Hash 索引结构的特殊性,其检索效率非常高,索引的检索可以一次定位,不像B-Tree 索引需要从根节点到枝节点,最后才能访问到页节点这样多次的IO访问,所以 Hash...

Mysql学习-索引总结(B-tree和hash、主键索引、唯一索引、普通索引、全文索引和组合索引)

对最近学习的mysql中的索引经行总结。其主要内容包括唯一索引、B-tree、哈希索引(自定义哈希索引和Innodb自适应哈希索引)和全文索引(自然语言搜索和布尔搜索)。参考书籍和文章是《Mysql技...

mysql索引结构B+Tree结构

数据库为什么要用B+树结构--MySQL索引结构的实现 B+树在数据库中的应用 { 为什么使用B+树?言简意赅,就是因为: 1.文件很大,不可能全部存储在内存中,故要存储到磁盘...

B-Tree索引在sqlserver和mysql中的应用

B-Tree索引在sqlserver和mysql中的应用 在谈论数据库性能优化的时候,通常都会提到“索引”,但很多人其实并没有真正理解索引,也没有搞清楚索引为什么就能加快检索速度,以至于在实践中...
  • hephec
  • hephec
  • 2014年11月29日 12:45
  • 356

mysql b-tree索引

索引优化,可以说是数据库相关优化,尤其是Query 优化中最常用的优化手段之一。很多人大部分时候都只是大概了解索引的用途,知道索引能够让 Query 执行得更快,但并不知道为什么会更快。尤其是索引的实...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:mysql hash 索引 vs B-TREE 索引
举报原因:
原因补充:

(最多只允许输入30个字)