B-Tree索引与Hash索引的比较

理解B-Tree和Hash的数据结构能够帮助我们预测不同存储引擎下的查询性能差异。存储引擎在索引中使用这些数据结构,尤其是MEMORY 同时提供了B-Tree和Hash索引让你选择。

B-Tree索引特性

B-Tree索引可以在表达式中使用=, >, >=,

SELECT * FROM tbl_name WHERE key_col LIKE 'Patrick%';

SELECT * FROM tbl_name WHERE key_col LIKE 'Pat%_ck%';

第一条语句中,只有'Patrick' <= keycol < 'Patricl' 的行会被考虑。第二条语句中,只有'Pat' <= keycol < 'Pau' 的行会被考虑。

下面的SELECT语句没有使用索引:

SELECT * FROM tbl_name WHERE key_col LIKE '%Patrick%';

SELECT * FROM tbl_name WHERE key_col LIKE other_col;

第一条语句是因为它以通配符开头,第二条语句是因为没有使用常量。

如果你使用... LIKE '%string%'而且string超过三个字符,那么MYSQL会使用Turbo Boyer-Moore algorithm算法来初始化查询表达式,然后用这个表达式来让查询更迅速。

查询中有colname IS NULL可以使用colname索引。

任何一个没有覆盖所有WHERE中AND级别条件的索引是不会被使用的。也就是说,要使用一个索引,这个索引中的第一列需要在每个AND组中出现。

下面的WHERE条件会使用索引:

... WHERE index_part1=1 AND index_part2=2 AND other_column=3

/* index = 1 OR index = 2 */

... WHERE index=1 OR A=10 AND index=2

/* optimized like "index_part1='hello'" */

... WHERE index_part1='hello' AND index_part3=5

/* Can use index on index1 but not on index2 or index3 */

... WHERE index1=1 AND index2=2 OR index1=3 AND index3=3;

下面的WHERE条件不会使用索引:

/* index_part1 is not used */

... WHERE index_part2=1 AND index_part3=2

/* Index is not used in both parts of the WHERE clause */

... WHERE index=1 OR A=10

/* No index spans all rows */

... WHERE index_part1=1 OR index_part2=10

有时候mysql不会使用索引,即使在可用的情况下。例如当mysql预估使用索引会读取大部分的行数据时。(在这种情况下,一次全表扫描可能比使用索引更快,因为它需要更少的检索)。然而,假如语句中使用LIMIT来限定返回的行数,mysql则会使用索引。因为当结果行数较少的情况下使用索引的效率会更高。

Hash索引特性

Hash类型的索引有一些区别于以上所述的特征:

它们只能用于对等比较,例如=和<=>操作符(但是快很多)。它们不能被用于像

优化器不能用hash索引来为ORDER BY操作符加速。(这类索引不能被用于搜索下一个次序的值)

MySQL不能判断出两个值之间有多少条数据(这需要使用范围查询操作符来决定使用哪个索引)。假如你将一个MyISAM表或InnoDB表转为一个依靠hash索引的MEMORY表,这可能会影响一些查询。

只有完整的键才能被用于搜索一行数据(使用了B-Tree索引,那么任何一个键的前缀都可以用于查找)。

mysql hash索引 btree索引_B-Tree索引与Hash索引的比较相关推荐

  1. mysql b tree图_MySQL索引--B-Tree(B+Tree)图文详解

    看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...

  2. mysql手机客户端_图解MySQL索引--B-Tree(B+Tree)

    看了很多关于索引的博客,讲的大同小异.但是始终没有让我明白关于索引的一些概念,如B-Tree索引,Hash索引,唯一索引....或许有很多人和我一样,没搞清楚概念就开始研究B-Tree,B+Tree等 ...

  3. MySQL索引数据结构二叉树、红黑树、B-Tree、B+Tree、Hash

    索引:帮助MySQL高效获取数据的有序的数据结构. 假设我们有一张表table,包含Clo1和Clo2两个字段 内存地址 Clo1 Clo2 0x07 1 36 0x5A 2 20 0x7A 3 80 ...

  4. mysql btree fulltext_Mysql主要索引方式:FULLTEXT,HASH,BTREE,RTREE。

    使用方式 CREATE TABLE `user` ( `id` bigint(20) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL ...

  5. Mysql索引Hash和BTree的区别

    我们在数据库见表时通常会给某个或者一些字段增加相应的索引,常用的的索引方法有hash和Btree两种. 一:BTree B-Tree 索引的物理文件大多都是以 Balance Tree 的结构来存储的 ...

  6. mysql b tree索引原理_B+Tree原理及mysql的索引分析

    一.索引的本质 MySQL官方对索引的定义为:索引(Index)是帮助MySQL高效获取数据的数据结构.提取句子主干,就可以得到索引的本质:索引是数据结构. 我们知道,数据库查询是数据库的最主要功能之 ...

  7. 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了)

    title: 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈人生了) tags: 面试常见题 常见面试题:为什么MySQL索引要用B+Tree呢?(看完你就能和面试官笑谈 ...

  8. mysql索引为什么使用B+tree,InnoDB与MyISAM 的区别

    文章目录 1. 索引的作用? 2. 索引有哪些数据结构 ①:Hash ①:二叉树 ②:红黑树 ③:B-Tree ④:B+Tree 3. B+Tree与B-Tree的区别 4. InnoDB 和 MyI ...

  9. Mysql索引的类型(单列索引、组合索引 btree索引 聚簇索引等)

    一.索引的类型 Mysql目前主要有以下几种索引类型:FULLTEXT,HASH,BTREE,RTREE. FULLTEXT 即为全文索引,目前只有MyISAM引擎支持.其可以在CREATE TABL ...

  10. MySQL探索(一):B-Tree索引

     MySQL是目前业界最为流行的关系型数据库之一,而索引的优化也是数据库性能优化的关键之一.所以,充分地了解MySQL索引有助于提升开发人员对MySQL数据库的使用优化能力.  MySQL的索引有很多 ...

最新文章

  1. 微信支付回调重复通知,正确的响应
  2. 字符类型(Java)
  3. simulink仿真实例_MATLAB机器人运动学仿真入门
  4. DIV + CSS 神话
  5. 【Cannot convert from [[B] to】 @RabbitListener 反序列化报错
  6. hdu 1892【二维树状数组】
  7. LeetCode 2007. 从双倍数组中还原原数组(map)
  8. 微信iOS多设备多字体适配方案总结
  9. 猎豹浏览器怎么查看历史记录 猎豹浏览器历史记录查看教程
  10. 【英语学习】【Daily English】U04 Neighborhood L04 I'd love to help out
  11. Harris角点检测算法优化
  12. 20200218:不同路径(leetcode62)
  13. 限时,字节Java程序性能优化宝典大全,这才叫真正的性能优化
  14. tasklist 结束进程_netstat -ano,ntsd;tasklist,tskill-查看杀死进程命令 | 学步园
  15. 利用matlab设计矩形脉冲信号,信号课程设计
  16. golang报错fatal error: all goroutines are asleep - deadlock
  17. 掌财社:央行重磅数据出炉 M2增速大降3个百分点 社融增量仅1.85万亿 释放什么信号?
  18. 微信生成公众号带参数二维码(一)
  19. Python爬虫实战,requests模块,Python实现拉勾网求职信息数据分析与可视化
  20. 开课吧JAVA高级架构师怎么样_开课吧JavaEE企业级高级架构师

热门文章

  1. 图像传感器c语言,『评测』DxOMark公布索尼A7C相机图像传感器评测结果
  2. 30亿用户同时左右滑一滑,约会市场迎来盛夏
  3. 【Carsim学习】Carsim2019安装教程
  4. CodeQL基础语法
  5. 7-33 地下迷宫探索 (30 分)
  6. 这样写也行,把hoppy放在ref这里,name放在state这里,只是相应的位置要改动,段落那里排好就行
  7. 【自然语言处理】韩语基础与入门(词汇篇)
  8. 三个短视频剪辑技巧分享,控制时长很关键,轻松剪出高质量视频
  9. 1024啊、终于等到了
  10. 如何用matlab画烧杯,MATLAB在动力学实验数据处理中的应用