IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【Mysql】索引失效的底层原理(含demo) -> 正文阅读

[大数据]【Mysql】索引失效的底层原理(含demo)

索引失效的7种情况

  1. 查询条件中有or,除非所有的查询条件都建有索引,否则索引失效
  2. like查询是以%开头
  3. 如果列类型是字符串,那在查询条件中需要将数据用引号引用起来,否则不走索引
  4. 索引列上参与计算会导致索引失效
  5. 违背最左匹配原则
  6. 全表扫描更快的意思。如果数据库预计使用全表扫描要比使用索引快,则不使用索引。

我们这边说的索引失效主要是为 复合索引?

MySQL底层为B+树,我们需要了解B+树的底层查询原理

B+树底层查询是 二分查找?

二分查找我们需要满足排序的有序性


举个例子:以下a,b 组成的复合索引

?单独来看a,b;则a是有序的,b是无序的,但如果把a确定,可以观察到当a的值确定时,b的值是相对有序的,如下:

当 a = 1,b 为 1 ,2

当 a = 2,b 为 1, 4

当 a = 3,b 为 1, 2

重点:只有当 a 和 b 都有序时(要满足二分查找的条件),复合索引才会有效,(因为如果a确定的话,b的顺序也是相对有序的)


所以复合索引失效主要是体现在,条件不满足二分查找的条件(即破坏了有序性)

注意:索引失效并不代表索引不起作用,而是索引只起了一部分作用(这点很重要,主要体现在explain语句中查看索引时,不能去看是否key是否有索引,而是去看索引影响的rows的行数,demo中我会讲解)


Demo

1. 创建一个名为 test 的表,插入一部分数据

2.? 创建一个复合索引:

  • a和b的复合索引:?test_index

3. 我主要分析以下三种情况,其他情况类似

  • select a,b from test where a=2?and b>3;
  • select a,b from test where a>2?and b>3;
  • select a,b from test where a>2?and b=3;

情况一:

explain?select a,b from test where a=2?and b>3;

?row的影响行数为2,

?当满足a=2条件下,有3条数据,而现在row的影响行数为2条数据,说明复合索引有效

原因:因为当满足a=2条件下时,b的3条数据在b+树中是相对有序的,所以复合索引有效

情况二:

select a,b from test where a>2?and b>3;

?row的影响行数为6

如果复合索引成功的话,影响行数应该为4,而此时row为6,说明索引失效,复合索引只有?a>2(a大于2的有6条数据) 这个条件有效(即索引一部分有效)?

原因:当a>2时,满足二分法有序性的条件,但b此时是不满足有序性的,如上图给的例子

情况三:

explain select a,b from test where a>2?and b=3;

?row的影响行数为6

如果复合索引成功的话,影响行数应该为1,而此时row为6,说明索引失效,复合索引只有?a>2有效

原因:当a>2时,满足二分法有序性的条件,但b此时是不满足有序性的,如上图给的例子

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-09-24 21:03:44  更:2022-09-24 21:04:05 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 9:52:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码