mysql索引本质
一、索引帮助mysql高效获取数据排好序的数据结构。
二、索引存储位置:磁盘文件。
三、索引结构:二叉树、红黑树、hash、BTree、B+Tree 。索引结构为了更快找到目标数据。
四、数据结构
4.1、二叉树
定义:每个结点最多有两个子树,左子树比父节点小,右子树比父节点大。
缺点:会出现极端情况导致整棵树只有左子树或只有右子树。
图:

4.2、红黑树
定义:
缺点:数据量大会导致树层数比较多,这样就会造成查找数据慢。
图:

4.3、hash数据结构
定义:散列表(Hash table,也叫哈希表),是根据关键码值(Key value)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。 对目标值进行hash运算得到hash值和数据磁盘指针地址保存到hash表,这样就达到快速定位数据位置。
缺点:精确查找十分快速,但范围查找就碰壁了。
图:无
4.4、BTree
定义:一个节点可以存储多个数据,这样可以避免黑红树的缺点,树的层数很变小。
缺点: 节点里面数组数据:每个数据的结构=索引数据+数据记录(即叶子节点存储键值和数据记录)。
图:

4.5、B+Tree
定义:B+Tree是在B-Tree基础上的一种优化。节点里面数组数据:每个数据只存储键信息,这样不存数据可以腾出空间放更多的键信息,让树层数越小。
- 非叶子节点只存储键信息。
- 所有叶子节点之间都有一个链指针。
- 数据记录都存放在叶子节点中。
缺点:无
图:

五、mysql采用B+Tree数据结构存储数据
5.1、B+TREE叶子节点指针作用:定位值比它大的叶子节点。
5.2、引申出为什么mysql "!="或者“<>” 不走索引。从下图可以知道原因,因为B树的左节点是比右节点小,而且节点有指针很快能找到范围的数据,B树特性+指针的配合这样可以快速找到指定范围数据。
图:

六、mysql为什么用整型自增作为索引比较好。而UUID作为索引效率比较低?
- 索引存储在磁盘,而且树的每个节点分配的空间有大小。整型占空间比较小,这样可以存放多个键值。反之然后UUID占空间比较大。
- 整型比较方便,UUID比较需要先转成ASCII在进行比较
mysql索引本质的更多相关文章
- MySQL索引原理及慢查询优化
原文:http://tech.meituan.com/mysql-index.html 一个慢查询引发的思考 select count(*) from task where status=2 and ...
- 【转】MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- [转]MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- MySQL索引背后的数据结构及算法原理【转】
本文来自:张洋的MySQL索引背后的数据结构及算法原理 摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持 ...
- MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
- (转)MySQL索引原理及慢查询优化
转自美团技术博客,原文地址:http://tech.meituan.com/mysql-index.html 建索引的一些原则: 1.最左前缀匹配原则,非常重要的原则,mysql会一直向右匹配直到遇到 ...
- MySQL索引原理及慢查询优化 转载
原文地址: http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰富的资源,已经成为绝大多数互联网公司的首选关系型数据库.虽然性能 ...
- MySQL索引原理及慢查询优化(转)
add by zhj:这是美团点评技术团队的一篇文章,讲的挺不错的. 原文:http://tech.meituan.com/mysql-index.html MySQL凭借着出色的性能.低廉的成本.丰 ...
- [纯干货] MySQL索引背后的数据结构及算法原理
摘要 本文以MySQL数据库为研究对象,讨论与数据库索引相关的一些话题.特别需要说明的是,MySQL支持诸多存储引擎,而各种存储引擎对索引的支持也各不相同,因此MySQL数据库支持多种索引类型,如BT ...
随机推荐
- springboot 集成J2Cache
J2Cache 是 OSChina 目前正在使用的两级缓存框架.第一级缓存使用 Ehcache,第二级缓存使用 Redis .由于大量的缓存读取会导致 L2 的网络成为整个系统的瓶颈,因此 L1 的目 ...
- Odoo Qweb语法
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/10826202.html 一:简介 QWeb是一个基于xml的模板引擎,用于生成HTML片段和页面. 模板指令 ...
- xshell链接ubuntu16
用xshell 链接 ubuntu16 失败 ,是因为没有装 ssh 服务 sudo apt-get install openssh-server //安装ssh服务 ps -ef | ...
- Virtualbox 设置虚拟机和物理机共享文件夹
Virtualbox 设置虚拟机和物理机共享文件夹 概述 当我们在本地机安装好一个虚拟机后,特别是安装linux系统的朋友们,经常需要将本地机的文件传递到虚拟机中, 能实现的方式肯定是多式多样的,就本 ...
- HTML通用模板
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 【转】tf.SessionRunHook使用方法
原文地址:https://blog.csdn.net/mrr1ght/article/details/81011280 .本文有删减. tf.train.SessionRunHook()是一个类:用来 ...
- RabbitMQ 的 docker 镜像使用
RabbitMQ 的 docker 镜像使用 1.下载镜像(management版本的才带有web管理界面) docker pull rabbitmq:3.7.18-management 2.创建容器 ...
- Spring Cloud 之 Ribbon 知识点:服务器负载均衡
Ribbon 是和 Feign 以及 Eureka 紧密协作,完成工作的,具体如下: 首先 Ribbon 会从 Eureka Client 里获取到对应的服务注册表,也就知道了所有的服务都部署在了哪些 ...
- 67-Flutter中高德地图插件的使用
1.注册和建立高德API应用 高德网站:https://lbs.amap.com/ 控制台-应用管理-创建应用 在创建 Key 2.获得SHA1 进入Flutter项目中的android文件夹内,打开 ...
- solidworks 学习 (二)
洗手液瓶建模