千家信息网

mysql中B树和哈希索引有什么区别

发表于:2025-02-23 作者:千家信息网编辑
千家信息网最后更新 2025年02月23日,小编给大家分享一下mysql中B树和哈希索引有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:了解B树和哈希数
千家信息网最后更新 2025年02月23日mysql中B树和哈希索引有什么区别

小编给大家分享一下mysql中B树和哈希索引有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!


前言:了解B树和哈希数据结构有助于预测查询在这些使用不同索引数据结构的存储引擎上的执行情况,特别是对于MEMORY存储引擎,它是允许您选择B树或哈希作为索引的存储引擎。

1. B树指数特征

B树索引可以在使用表达式中使用的对列的比较 =, >, >=, <, <=,或BETWEEN关键字。如果使用LIKE 或to LIKE且是一个不以通配符开头的常量字符串,则索引也可用于比较 。

1.例如,以下SELECT语句将使用索引:

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

在第一个语句中 'Patrick' <= key_col < 'Patricl',在第二个语句中'Pat' <= key_col < 'Pau'

2.以下SELECT语句不使用索引:

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

在第一个语句中,LIKE 值以通配符开头。在第二个语句中,该LIKE值不是常量。

如果使用了像'%string%'且长度超过三个字符的字符串查询,那么MySQL将使用Turbo Boyer-Moore算法初始化这个模型,用这个模型来匹配速度会更快.

不跨越子句中的所有AND级别的 任何索引 WHERE不用于优化查询。换句话说,为了能够使用索引,必须在每个AND组中使用索引的前缀 。

3.以下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;

4.这些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无论如何都会使用索引,因为它可以更快地找到在结果中返回几行。

2. 哈希指数特征

散列索引与刚才讨论的特征有些不同:

它们仅用于使用=或<=>(文章结尾有此符号说明) 运算符的相等比较 (但速度非常快)。它们不用于比较运算符,例如 <找到一系列值。依赖于这种类型的单值查找的系统被称为" 键值存储 " ; 要将MySQL用于键值查找类,请尽可能使用哈希索引。

优化器无法使用哈希索引来加速 ORDER BY操作。(此类索引不能用于按顺序搜索下一个条目。)

MySQL无法确定两个值之间大约有多少行(范围优化器使用它来决定使用哪个索引)。如果将 MyISAM或 InnoDB表更改为哈希索引 MEMORY表,则可能会影响某些查询。

只有整个键可用于搜索行。(使用B树索引,键的任何最左边的前缀都可用于查找行。)

附录

解释=和<=>的区别:

相同点:像常规的=运算符一样,两个值进行比较,结果是0(不等于)或1(相等),换句话说:'A'<=>'B'得0和'a'<=>'a'得1,都是值的比较。
不同点:NULL的值是没有任何意义的。所以=号运算符不能把NULL作为有效的结果。所以:请使用<=>,'a' <=> NULL 得0 NULL<=> NULL 得出 1。和=运算符正相反,=号运算符规则是 'a'=NULL 结果是NULL 甚至NULL = NULL 结果也是NULL。顺便说一句,mysql上几乎所有的操作符和函数都是这样工作的,因为和NULL比较基本上都没有意义。

用处当两个操作数中可能含有NULL时,你需要一个一致的语句,此时就可以用<=>.

以上是"mysql中B树和哈希索引有什么区别"这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注行业资讯频道!

索引 哈希 语句 运算符 运算 结果 查询 存储 不同 两个 子句 字符 引擎 情况 特征 篇文章 搜索 内容 前缀 字符串 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 山东天马互联网科技有限公司 国家民政局负责统筹网络安全工作 数据库应用技术文档 pyqt数据库分页 存储服务器控制器 天九互联网科技 咨询工程师网络安全概述 学习网页设计软件开发 Dgs升级后数据库丢失 db2 备份数据库 工具 jdk对于数据库的作用 腾讯云 招聘 服务器 计算机网络技术的职业小结 丽水嵌入式软件开发是做什么的 网络安全股票有那些 网络技术基础模块判断题道客 中国电信集团网络安全研究院 动作游戏服务器一般用什么通讯 江苏网络服务器机柜欢迎选购 数据库删除记录后可以恢复吗 大话西游2烟雨斜阳哪个服务器好 清江浦区梦之星软件开发工作室 接到自称网络安全中心的电话 湖南美音网络技术有限公司地址 最好的网络安全概念股 智慧景区软件开发费用 浙江北斗卫星授时服务器云主机 德惠智能网络技术服务 编目远程数据库 人类基因密码图谱数据库
0