千家信息网

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

发表于:2025-11-08 作者:千家信息网编辑
千家信息网最后更新 2025年11月08日,小编给大家分享一下mysql中B树和哈希索引有什么区别,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!前言:了解B树和哈希数
千家信息网最后更新 2025年11月08日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安全错误 数据库的锁怎样保障安全 芜湖物流软件开发哪家公司好 退出小米账号提示服务器出错 软件开发质量保证计划 软件开发工具有什么意思 国家网络安全局内设机构 mc服务器最大视距 数据库的报表用于 热血江湖手游怎么选择服务器 易语言ip连接服务器 青岛联想服务器哪里有 软件开发项目经验应该怎么写 大数据网络安全概念股 武汉小圆子互联网科技有限公司 嘉定区银联数据库服务收费标准 中国一流网络安全学院 网络安全督查组 网络安全技术学院考试难吗 网络安全预警平台监理招标 网络安全经济及社会效益 中国网络安全认证公司 适合软件工程课的软件开发 数据库广告表 数据库的报表用于 网络安全综合治理措施 麻将软件开发要多少钱 案件繁简分流软件开发 两台服务器文件夹同步 计算机软件开发公司主要做什么 数据库语句中文件说明的框架 服务器内存加在什么地方
0