mysql索引

本文详细探讨了MySQL中常见的几种索引模型,包括哈希表、有序数组和B+树,强调了它们的优缺点。特别指出,InnoDB存储引擎使用B+树作为索引模型,适合大数据量的高效查询。同时,文章介绍了主键索引和普通索引的区别,以及高性能索引策略,如独立列、避免%开头的like查询和最左匹配原则。最后,提供了索引性能验证的方法和使用EXPLAIN优化查询的建议。
摘要由CSDN通过智能技术生成

mysql索引

索引的出现是为了提高查询效率,但是实现索引的方式却有很多种,所以这里也就引入了索引模型的概念。可以用于提高读写效率的数据结构很多,这里我先介绍三种常见、也比较简单的数据结构,它们分别是哈希表、有序数组和搜索树。

哈希表

哈希表是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Value。哈希的思路很简单,把值放在数组里,用一个哈希函数把 key 换算成一个确定的位置,然后把 value 放在数组的这个位置。

哈希表的优点:等值查询非常快
缺点:因为不是有序的,所以哈希索引做区间查询的速度是很慢的。

有序数组

有序数组在等值查询和范围查询场景中的性能就都非常优秀。

优点:如果仅仅看查询效率,有序数组就是最好的数据结构了。
缺点:在需要更新数据的时候就麻烦了,往中间插入一个记录就必须得挪动后面所有的记录,成本太高。

二叉搜索树

二叉搜索树的特点是:每个节点的左儿子小于父节点,父节点又小于右儿子
想象一下一棵 100 万节点的平衡二叉树,树高 20。一次查询可能需要访问 20 个数据块。在机械硬盘时代,从磁盘随机读一个数据块需要 10 ms 左右的寻址时间。也就是说,对于一个 100 万行的表,如果使用二叉树来存储,单独访问一个行可能需要 20 个 10 ms 的时间,这个查询可真够慢的。
为了让一个查询尽量少地读磁盘,就必须让查询过程访问尽量少的数据块。那么,我们就不应该使用二叉树,而是要使用“N 叉”树。这里,“N 叉”树中的“N”取决于数据块的大小。

InnoDB 使用了 B+ 树索引模型,所以数据都是存储在 B+ 树中的。B+树的形态:

B+树的形态:

在这里插入图片描述每一个父节点都出现在子节点中,是子节点最大或者最小的值。
在这里插入图片描述
只有叶子节点包含数据

范围查询:
在这里插入图片描述

B+树的特征:

1.有k个子树的中间节点包含有k个元素(B树中是k-1个元素),每个元素不保存数据,只用来索引,所有数据都保存在叶子节点

2.所有的叶子结点包含了全部元素的信息,及指向含这些元素记录的指针,且叶子结点本身依关键字的大小自小而大顺序链接。(链表

3.所有的中间节点元素都同时存在于子节点,在子节点元素中是最大(或最小)元素

4、B+树查找时是从上到下查找B-树则是从下往上查找中序遍历

B+树的优势:

1.单一节点存储更多的元素(这样该节点下分支变多了,树变矮胖了),使得查询的IO次数更少。

2.所有查询都要查找到叶子节点,查询性能稳定。

3.所有叶子节点形成有序链表,便于范围查询

基于主键索引和普通索引的查询有什么区别?

如果语句是 select * from T where ID=500,即主键查询方式,则只需要搜索 ID 这棵 B+ 树;

如果语句是 select * from T where k=5,即普通索引查询方式,则需要先搜索 k 索引树,得到 ID 的值为 500,再到 ID 索引树搜索一次。这个过程称为回表。

1. EXPLAIN 你的 SELECT 查询

使用 EXPLAIN 关键字可以让你知道MySQL是如何处理你的SQL语句的。这可以帮你分析你的查询语句或是表结构的性能瓶颈。

EXPLAIN 的查询结果还会告诉你你的索引主键被如何利用的,你的数据表是如

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值