了解B树和哈希数据结构可以帮助预测对使用索引中的这些数据结构的不同存储引擎执行不同查询的方式,特别是对于MEMORY允许您选择B树或哈希索引的存储引擎。

B树索引特征

B树索引可用于使用=、>、>=、

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

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

在第一个语句中,只考虑'Patrick'<=key_col

以下SELECT语句不使用索引:

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

SELECT * FROM tbl_name WHERE key_col LIKE other_col;

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

如果你用... LIKE '%string%'和string超过三个字符一样,MySQL使用turboyer-Moore算法初始化字符串的模式,然后使用此模式更快地执行搜索。

如果使用col_name IS NULL索引,则 使用的搜索会使用col_name索引。

没有覆盖子句中所有AND级别的 任何索引都 WHERE不会用于优化查询。换句话说,为了能够使用索引,必须在每个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仍会使用索引,因为它可以更快地找到索引。几行返回结果。

哈希指数特征

哈希索引与刚刚讨论的索引具有一些不同的特征:

它们仅用于使用=or <=> 运算符的相等比较 (但非常快)。它们不用于比较运算符,例如

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

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

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

mysql哈希索引 kv_mysql8 参考手册--B树和哈希索引的比较相关推荐

  1. MySQL 为什么用索引,为什么是 B+树,怎么用索引

    MySQL 索引 A database index is a data structure that improves the speed of operations in a table. Inde ...

  2. mysql聚集索引和二级索引_mysql8 参考手册--聚集索引和二级索引

    每个InnoDB表都有一个特殊的索引,称为聚簇索引 ,用于存储行数据.通常,聚簇索引与主键同义 .为了从查询,插入和其他数据库操作中获得最佳性能,您必须了解如何InnoDB使用聚簇索引为每个表优化最常 ...

  3. mysql 分区个数限制_mysql8 参考手册-分区的限制

    本节讨论了对MySQL分区支持的当前限制. 禁止使用的构造. 分区表达式中不允许以下构造: 存储过程,存储函数,UDF或插件. 声明的变量或用户变量. 有关分区表达式中允许的SQL函数的列表,请参见 ...

  4. mysql 表空间修改_mysql8 参考手册--调整系统表空间

    系统表空间是更改缓冲区的存储区.如果在系统表空间中创建表,而不是在每个表文件或常规表空间中创建表,则它也可能包含表和索引数据.在以前的MySQL版本中,系统表空间包含InnoDB数据字典.在MySQL ...

  5. mysql 查询执行计划_mysql8 参考手册--了解查询执行计划,使用EXPLAIN优化查询

    根据表,列,索引的详细信息以及WHERE子句中的条件,MySQL优化器考虑了许多技术来有效执行SQL查询中涉及的查找.无需读取所有行即可执行对巨大表的查询:可以执行涉及多个表的联接,而无需比较行的每个 ...

  6. mysql hash分区 数目_mysql8 参考手册-HASH分区

    分区依据HASH主要用于确保在预定数量的分区之间均匀分布数据.使用范围或列表分区时,必须明确指定应将给定列值或一组列值存储在哪个分区中:对于散列分区,此决定将由您来决定,您只需要根据要散列的列值以及要 ...

  7. mysql数据类型及语法_mysql8 参考手册--Numeric数据类型语法

    MySQL支持所有标准的SQL数值数据类型.这些类型包括精确数字数据类型(整数.SMALLINT.DECIMAL和numeric)以及近似数字数据类型(FLOAT.REAL和DOUBLE PRECIS ...

  8. mysql的时间模糊chax_MySQL™ 参考手册(通用安装指南)

    通用安装指南 以下部分包含选择.下载和验证你的发行版所需的信息,本章后面部分中的说明介绍了如何安装所选的发行版. 要安装的MySQL版本和分发版 MySQL可在许多操作系统和平台上使用,有关官方支持的 ...

  9. mysql的Event权限_mysql8 参考手册-事件调度程序和MySQL特权

    要启用或禁用调度事件的执行,必须设置全局 event_scheduler系统变量的值.这需要足以设置全局系统变量的特权. 该EVENT特权控制事件的创建,修改和删除.可以使用授予该特权GRANT.例如 ...

最新文章

  1. 运维监控系统——使用API在zabbix监控系统中查看,创建及删除监控主机
  2. Table布局及其它布局
  3. 查看操作系统版本linux_查看电脑操作系统版本(适用于Mac OS)
  4. mysql myisam 支持事务吗_第三章(附)mysql表类型MyISAM和InnoDB区别(决定了是否支持事务)...
  5. c++ static修饰符浅析
  6. Java基础学习总结(79)——Java本地接口JNI详解
  7. Java多态向上转型作用,热度飙升!
  8. 学python可以做什么-学会Python后都能做什么?介绍五种Python的实用场景
  9. 优先级队列之PriorityQueue
  10. 2008r2 php mysql_Win2008R2IIS7.5+PHP5(FastCGI)+MySQL5环境搭建教程_MySQL
  11. 美好的十年工程师生涯
  12. listview 分页加载
  13. Map-Based Indoor Pedestrian Navigation Using an Auxiliary Particle Filter
  14. swift锁屏播放,音乐进度更新,专辑,歌手名显示
  15. 二维码有效期要注意什么
  16. java wps 二次开发,Wps二次开发(POI)
  17. PAC学习框架-泛化误差
  18. 前端测试系列---静态页面测试
  19. 【破解利器】脱壳工具(软件扒皮工具)
  20. opendns_如何使用OpenDNS设置全屋家长控制

热门文章

  1. TC2.0中怎样调用汇编程序
  2. C++中链表的一些操作
  3. ie6使用绝对定位position:absolute,box不显示
  4. 167. Two Sum II - Input array is sorted (C, C++, Python)
  5. win10环境下VTK7.1的编译和Qt调用VTK的详细教程二(VS2013编译支持Qt的VTK库)
  6. r510服务器开机无显示,联智通达工业主板常见问题之工控电脑开机无显示
  7. 元气骑士超级计算机有什么用,元气骑士三持技巧分享,手残党的福利轻松过关...
  8. java启动servlet_Java Servlet 运行原理分析
  9. 7-4 求下一天 (30 分)
  10. 使用python进行渗透测试_利用Python进行Web渗透测试(五):剖析HTTP请求