MySQL|8分钟带你深入了解MySQL是如何利用索引的,网友:大师,我悟了

文章图片
今日分享开始啦 , 请大家多多指教~
mysql索引结构:mysql索引使用B+tree , 为什么使用B+tree呢 , 首先 , 使用索引是为了加快查找的速度 , B+tree的查找时间复杂度为log(n).那为什么不用o(1)的hashMap呢 。 mysql是有使用hashMap结构的hash索引的 , 但大部分情况下 , 我们使用的索引并不是hash索引 , 主要是hash索引这种结果在处理 != >, < 这种范围查询时 , 需要全表扫描 , 时间复杂度为o(n) 。
为什么不使用B tree? BTree和B+Tree的区别是 , B+Tree的非叶子结点只保存索引 , 不保存数据 , 这样一个节点保存的数据更多 , 树的高度更低 , 在读取索引时 , 可以省IO(其实 , 这里降低树高度基本没啥用 , 因为往往我们的Tree的每个节点的度都很大 , BTree和B+Tree高度基本差不多) 。
另一个主要的作用是 , 由于数据节点都在叶子结点上 , 而每个叶子结点又使用双向链表链接 , 这样 , 在处理范围查询时 , 只需要查定一个下界 , 然后在叶子结点上遍历即可 , 且天然有序 。
主键索引和二级索引以Innodb为例:主键索引是和数据文件放在一块的 , 即数据文件在叶子结点上 。 对于主键索引 , 找到了主键索引 , 主键索引对应的value即为数据row 。 而非主键索引被称为二级索引的原因是 , 非主键索引的value存放的是主键的值 , 我们在使用非主键索引查找时 , 需要先根据索引找到主键 , 然后根据主键去找数据row 。
根据主键再去找数据row的过程称为回表 。 因为对于这样的索引 , 不直接和数据关联 , 所以称为二级索引 。 对于二级索引 , 如果我们查找的列 , 已经全部在索引列里了 , 这时候就不需要回表了 , 这种索引成为覆盖(covered)索引 。
主键索引也叫聚簇索引 , 二级索引也叫非聚簇索引 。
explain索引优化当我们想对一个sql语句进行优化时 , 可以用explain查看当前sql的执行计划 。 对于explain的输出 , 几个重要的如下 。
Type:
- const: 用主键匹配
- eq_ref: 两个表join的时候 , join的key是两个表的主键 。 这时候 , 对于前一个表的每一行 , 后一张表只需要扫描一行 One row is read from this table for each combination of rows from the previous tables. Other than the system and const types this is the best possible join type. It is used when all parts of an index are used by the join and the index is a PRIMARY KEY or UNIQUE NOT NULL index.
- ref: 通过非唯一索引扫描 , 通常不需要进行排序时 , 只要通过ref或者最左前缀匹配就可以了 。
- range: range can be used when a key column is compared to a constant using any of the = <> > >= < <= IS NULL <=> BETWEEN LIKE or IN() operators.
- index: 使用索引 , 但比如在扫描之后 还需要order by. 这时候 , 需要扫描整个索引树 。
- all: 全表扫 。
- 通常情况下 , 我们优化的目标到ref就可以了 。
- use index: 仅需要使用索引 , 不需要回表 。
- use where: 通过where子句过滤 , where子句过滤存储引擎返回的结果 。
- use filesort 需要使用排序 。
数据查询时 , where自己后面的顺序无所谓 , mysql会自动帮你优化 。
- MySQL|华为不再孤单?国产巨头杀入5G领域,市值暴涨4千亿超越腾讯!
- MySQL|它可能是300元内最值得购入的耳机
- 卢伟冰不讲“武德”,跑分75万+38分钟满电+OIS防抖,12G+256G仅售2364元
- 太阳光到达地球需要8分钟,人一眼就能看到太阳,眼速比光速快?
- MySQL|中企接连行动,苹果始料未及,央媒的呼吁起作用了?
- MySQL|程序员应知应会之MySQL的存储引擎
- MySQL|关于有手机厂商库存严重这件事,我没有证据不敢乱说是哪一家
- MySQL|果然还得是华为,mate50 Pro即将发布,麒麟+鸿蒙3.0+支持5G网络
- MySQL|千元机天花板,120Hz高刷屏+天玑1200处理器,价格绝对是无可比拟的。
- MySQL|为什么懂行的买苹果三星,半懂的华为,外行的买小米?真是这样?
