MySQL 索引的建立对于 MySQL 的高效运行是很重要的,索引可以大大提高 MySQL 的检索速度。

索引方法

Mysql 的索引方法有两种,BTERR 和 HASH。

散列表(Hash Table)和 B+Tree 都是一些常用的数据结构,再数据结构前篇中介绍过一些,关于散列表和树的数据结构,后续也会在《数据结构后篇》中总结一下。

Hash

Hash 索引如何提高查询速度

Hash 索引是将索引键通过 Hash 运算之后,将 Hash 运算结果的 Hash 值和所对应的行指针信息存放于一个 Hash 表 (可以是数组结构) 中。

那很显然采用 Hash 索引,在不考虑 Hash 冲突的情况下,通过 Hash 索引的可以一次定位数据,效率要比 BTree 高很多。

Hash 索引缺陷

Hash 函数对索引健运算后,索引无法保证与索引健值大小一致,所以 Hash 索引有明显缺陷,就是不支持范围查询;无法利用索引的数据来避免 sql 查询的排序运算;对组合索引而言因为是组合健值进行 Hash 运算,所以无法使用部分索引让组合索引生效。

Hash 索引使用场景

那只需要做等值比较查询,而不包含排序或范围查询的需求,都适合使用哈希索引

B+Tree

B 树 (B-Tree) 属于多叉树又名平衡多路查找树,那 B+ 数属于改进版的 B 树,

B 树跟 B+ 树的不同点

B+ 树中的节点不存储数据,只是索引,而B树中的节点存储数据

B 树中的叶子节点并不需要链表来串联。

B+Tree 如何提高查询速度

B+Tree 利用平衡查找树的有序性和高效遍历性,和 B+Tree 构建的有限高度的多叉树,通过 IO 次数的降低和查询遍历效率的提高,来提高查询速度。

平衡查找树的特点比较简单,后续也会在《数据结构后篇》中总结一下

已区间查询为例,B+Tree 数据结构中只需要定位到区间起点值对应在树中的结点,然后从这个结点开始,按照平衡查找树的遍历方法继续遍历,直到区间终点对应的结点为止,这期间遍历得到的数据就是满足区间值的数据。

类似于我们在《常用数据结构前篇》中提到的跳表的原理。利用局部数据,一层一层靠近查询数据。

B+Tree 索引使用场景

Mysql 数据库中使用最为频繁的索引类型,不仅仅在 MySQL 中是如此,实际上在其他的很多数据库管理中 BTREE 索引也同样是作为最主要的索引类型

扫一扫,关注我

mysql索引级别快慢_面试小点-MySQL 的两种索引方法如何提高查询速度相关推荐

  1. redis提高查询速度_面试小点-MySQL 的两种索引方法如何提高查询速度

    MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度. 索引方法 Mysql的索引方法有两种,BTERR和HASH. 散列表(Hash Table)和B+Tre ...

  2. groupby索引有效吗_面试官:MySQL建索引需要遵循哪些原则呢?

    点击关注上方"SQL数据库开发", 设为"置顶或星标",第一时间送达干货 1.选择唯一性索引 唯一性索引的值是唯一的,可以更快速的通过该索引来确定某条记录.例如 ...

  3. mysql close 出错_MySQL错误Forcing close of thread的两种解决方法

    最近网站访问量大增,可能有些频道程序也有一些问题,造成了MySQL数据库出现Forcing close of thread 28790 user错误.如果遇到这种情况改怎么解决呢?icech找到两种方 ...

  4. PDF文件怎么压缩小一点?这两种压缩方法很好用

    PDF文件怎么压缩的小一点呢?大家在办公过程中,PDF文件可能是最常见的文件之一,大家发送文件都会使用它.使用的次数多的小伙伴也许就会察觉到,当发送内存很大的PDF文件时,会耗费我们很长时间,发送和接 ...

  5. mysql服务器级别角色_服务器数据库系列 - MySQL事务隔离级别详解

    作者:xm_king SQL标准定义了4类隔离级别,包括了一些具体规则,用来限定事务内外的哪些改变是可见的,哪些是不可见的.低级别的隔离级一般支持更高的并发处理,并拥有更低的系统开销. Read Un ...

  6. 我的小快排(两种分割方法)

    今天看到微博上有人转一篇文章,题目是<你问什么写不好快排>,看看自己多长时间能把快排写出来.结果,果然20分钟没写出来,本来以为明白原理,结果实现的出现各种问题,小 bug.最终花了半个点 ...

  7. mysql system账户密码忘记了_MySQL数据库root账户密码忘记两种处理方法(保有效)...

    方法1: 1.停止MySQL服务 kill cat /var/run/mysqld/mysqld.pid 或者 pkill mysqld 2.创建一个密码赋值语句的文本文件 vi mysql-init ...

  8. mysql workbench kernelbase.dll_电脑出现kernelbase.dll错误的两种解决方法

    KernelBase.dll是Windows操作系统的重要文件,它为各种应用程序提供服务.如果电脑提示kernelbase.dll错误,这该怎么处理?大家可以用电脑自带的防火墙或者是第三方软件来进行故 ...

  9. QQ空间迁移_【Frame_relay子接口的两种配置方法】

    Frame relay子接口的两种配置方法 2009-05-18 17:31:39 配置Frame relay子接口 R1:R3 103:301 R2:R3 203:302 1,多点子接口R1 con ...

最新文章

  1. python3.8.2汉化包-Python3.8.2中文版 32/64位 官方最新版
  2. Spring Boot修改内置Tomcat端口号
  3. LeetCode 292 Nim Game
  4. JavaScript学习(八十三)—JavaScript书写位置、注释、以及输入输出语句
  5. “元宇宙”究竟是什么?我用最通俗的大白话给IT人说清楚
  6. Openstack M版快速配置(二)--刷数据库
  7. 题解——洛谷P2827 NOIP提高组 2016 蚯蚓
  8. IT兄弟连 JavaWeb教程 JSP定义
  9. matlab微带带通滤波器,小型化宽阻带微带带通滤波器的设计方案
  10. Java语音转文字功能
  11. Python 中国慕课第五章测试 OpenJudge作业(包含通过码)
  12. java模拟器.apk_java游戏模拟器安卓版下载-java模拟器apk下载 v2.2.0 安卓版-IT猫扑网...
  13. 那些编程中遇到的常见英文缩写
  14. layabox 文本 html,LayaBox:富文本HtmlDivElement常用设置
  15. Java SE系列笔记——HashMap
  16. weblogic启动慢原因
  17. 魔百盒CM201-2_朝歌ZG_主板版号M8291_强刷固件包
  18. 三端双向可控硅(triac)
  19. 【专题】经典DP问题(上)
  20. kibana java_Kibana安装及使用说明

热门文章

  1. isset,empty,is_null小知识
  2. 【译】JavaScript面试问题:事件委托和this
  3. 褪去华衣 裸视学习 - 机器学习 - 转
  4. 四行代码创建复杂(无限级)树
  5. ASP.NET实现增删改查等功能(Access版)系统之一
  6. java后端需要注意的事项_【后端开发】Java中关于null的含义以及使用中要注意的事项...
  7. 电脑格式化的危害_防止硬盘被格式化的六大方法
  8. 计算机毕业设计中用Java编写一个订餐系统(JAVA SWING)
  9. python可以和java共存吗_python3 and python2 共存
  10. java中的递归问题_java 递归问题