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

  介绍

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

,,

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

1。B树指数特征

B树索引可以在使用表达式中使用的对列的比较=祝辞,=& lt;, & lt;=⒒蛑涞墓丶帧H绻褂孟不痘蛳不肚沂且桓霾灰酝ㄅ浞返某A孔址?则索引也可用于比较,

1。例如,以下选择语句将使用索引:

SELECT *从tbl_name key_col像& # 39;帕特里克% & # 39;;   SELECT *从tbl_name key_col像& # 39;帕特% _ck % & # 39;;

在第一个语句中& # 39;帕特里克# 39;& lt;=key_col & lt;& # 39;Patricl& # 39;,在第二个语句中& # 39;帕特# 39;& lt;=key_col & lt;& # 39;保罗# 39;

2。以下选择语句不使用索引:

SELECT *从tbl_name key_col像& # 39;帕特里克% % & # 39;;   SELECT *从tbl_name key_col像other_col;

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

如果使用了像& # 39;字符串% % & # 39;且长度超过三个字符的字符串查询,那么MySQL将使用涡轮Boyer-Moore算法初始化这个模型,用这个模型来匹配速度会更快。

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

3。以下,子句使用索引:

index_part1=1和index_part2=2和other_column=3/*指数=1或索引=2 */指数=1或10=和指数=2/*优化像“index_part1=& # 39;你好# 39;“*/index_part1=& # 39;你好# 39;和index_part3=5/*可以使用索引>/*不使用index_part1 */index_part2=1和index_part3=2在哪里/*指数中未使用WHERE子句的两个部分*/指数=1或10=*//*没有索引跨越所有行   index_part1=1或index_part2=10

有MySQL时不使用索引,即使有索引也是如此。发生这种情况的一种原因是,优化器估计使用索引将需要MySQL访问表中非常大比例的行。(在这种情况下,表扫描可能会快得多,因为它需要的搜索次数较少。)但是,如果这样的查询:例如限制只用于检索某些行,那么MySQL无论如何都会使用索引,因为它可以更快地找到在结果中返回几行。

2。哈希指数特征

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

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

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

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

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

附录

解释=和& lt;=祝辞的区别:

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

用处当两个操作数中可能含有NULL时,你需要一个一致的语句,此时就可以用& lt;=祝辞。

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

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