MySQL索引失效的七大场景

news2024/12/25 8:56:14

文章目录

  • 口诀
  • 初始化数据库
  • 索引失效七大场景
    • 模(模糊查询)
    • 型(数据类型)
    • 数(函数)
    • 或(OR)
    • 运(运算)
    • 最(最左原则)
    • 快(查询数据量大)

口诀

模型数或运算快

初始化数据库

这里我们以MySQL自带的world数据库中的country表为例。

索引失效七大场景

模(模糊查询)

向name列添加索引

create index index_name on country(name);

查看country表索引

show index from country;

在这里插入图片描述

  • 测试like完全匹配
explain select count(1) from country  where name like '%Aruba%'

在这里插入图片描述
可以看到type级别是index。索引失效。

在 MySQL 中,使用 EXPLAIN 语句可以查看查询语句的执行计划,了解 MySQL 如何执行查询。其中,EXPLAIN
语句的结果集中的 type 字段用于表示 MySQL 在执行查询时所使用的访问类型。
type 字段可能的取值包括:
system:表示只有一行数据的表,通常是一些系统表; const:表示只有一行数据的表,通常是通过在查询中指定主键或唯一索引来检索数据;
eq_ref:表示使用了连接索引,且索引的所有部分都被使用,一般出现在连接查询中;
ref:表示使用了非唯一性索引,返回匹配某个单独值的所有行;
fulltext:表示使用全文索引进行搜索;
ref_or_null:表示使用非唯一性索引,但可能存在一个或多个 NULL 值;
index_merge:表示使用了多个索引进行查询,并将结果进行合并;
unique_subquery:表示使用了子查询,并且该子查询使用了唯一性索引;
index_subquery:表示使用了子查询,并且该子查询使用了非唯一性索引;
range:表示使用了索引进行范围查询;
index:表示全表扫描,并且按索引顺序扫描;
all:表示全表扫描。
需要注意的是,type字段的取值顺序是从最好到最差的查询类型顺序。当 type 字段的取值是 system、const、eq_ref 时,性能最好;当 type字段的取值是 all 时,性能最差。
通过查看 type字段的取值,可以评估查询的性能并优化查询。通常来说,使用索引查询会比全表扫描查询更快速、更高效。因此,尽可能地使用索引来优化查询是一个很好的选择。

  • 测试like左匹配
explain select count(1) from country where Name like '%Aruba'

在这里插入图片描述
type级别为index,索引失效。

  • 测试like右匹配
explain select count(1) from country where Name like 'Aruba%';

在这里插入图片描述
type级别为range,索引命中!
所以注意模糊查询右匹配可以命中!!!

型(数据类型)

如果数据类型不匹配那么索引就会失效。
如下面的sql

explain select count(1) from country where name=1

在这里插入图片描述

数(函数)

对索引的字段使用内部函数,索引也会失效。
对population字段创建索引

create index index_population on country(population);

在这里插入图片描述
这里对population字段使用POW函数

explain select pow(Population,2) from country;

在这里插入图片描述
索引失效。

或(OR)

where语句中使用or来连接的字段,如果一个有索引一个没索引,那么存储引擎将放弃索引而全表扫描

explain select count(1) from country where name like 'Aruba%' or SurfaceArea=193;

在这里插入图片描述
级别为ALL,全表扫描,索引失效。

运(运算)

对索引的列进行算术运算将使索引失效。

explain select count(1) from country where Population+1>100000;

在这里插入图片描述

最(最左原则)

嘴和索引,查询的条件列不是联合索引的第一个列,索引失效。
给Continent,Region,IndepYear字段创建联合索引

create index index_union on country(Continent,Region,IndepYear);

在这里插入图片描述

  • where条件中包含联合索引最左字段
explain select count(1) from country where Region='Caribbean' and Continent='North America';

在这里插入图片描述
级别为ref,索引有效。

  • where条件中不包含联合索引最左字段
explain select count(1) from country where IndepYear IS NULL and Continent='North America';

在这里插入图片描述
索引失效。

快(查询数据量大)

当查询数量超过表的一部分,索引就会失效。

explain select count(1) from country where Population>=0;

在这里插入图片描述
Population>=0全部数据都会查出,type是index,索引失效。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/445423.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

接口自动化测试系统知识大全,你想要的全都有

目录 接口自动化测试的前景 接口自动化测试的方法 接口自动化测试怎么做 接口自动化测试工具有哪些? 接口自动化测试框架 接口自动化测试的前景 随着移动互联网、云计算和大数据等技术的不断发展,接口自动化测试在软件开发中的重要性越来越凸显。尤其是随着微…

typora导出PDF很慢的解决办法

Typora导出PDF文件一直卡住 以前可以导出,但突然导出错误 1、首先,查看服务中的Print Spooler是否打开,没有打开进行服务打开 2、打开后,再进行导出,不行的话,就是前面的打印进程阻塞 解决方法&#xff…

软件测试?月薪20k+?不会自动化测试的我真的很难....

做自动化测试后悔吗? 后悔,真的后悔! 后悔没有早点学..... 虽然现在网上到处都在散播35的焦虑,姑且信之,那么反问你,如果你30岁了,那么给你5年,能够在某个领域成为专家呢&#xf…

计算广告(十七)

多渠道组合路径效率评价 ​ 编辑切换为居中 添加图片注释,不超过 140 字(可选) 分析背景: 电商归因分析通常以 last_click 为基准,将成交转化归功于用户完成转化前的最近一个广告系列。然而,在此之前&a…

java--线程池

目录 1.线程池概 2 为什么要使用线程池 1创建线程问题 2解决上面两个问题思路: 3线程池的好处 4线程池适合应用场景 3 线程池的构造函数参数 1.corePoolSize int 线程池核心线程大小 2.maximumPoolSize int 线程池最大线程数量 3.keepAliveTime long 空闲…

Centos elasticsearch 8.7.0 集群搭建

Install Elasticsearch with RPM | Elasticsearch Guide [8.7] | Elastic 准备了3台centos,ip分别是: 1、192.168.1.103 2、192.168.1.148 3、192.168.1.192 开始安装第1个节点 1、 rpm --import https://artifacts.elastic.co/GPG-KEY-elasticse…

快速引用网站标题链接到Markdown

JS脚本 将JS脚本添加到书签栏,通过调用书签栏执行快速复制网页标题和链接 合成Markdown格式的方法: javascript:!function(a){var b document.createElement("textarea"),c document.getSelection();(b.textContent a),document.body.ap…

【C++】STL——vector 深度剖析 及 模拟实现

文章目录 前言1. vector的介绍及使用1.1 vector的介绍1.2 vector的使用1.2.1 构造函数1.2.2 vector对象的遍历1.2.3 vector的迭代器1.2.4 reserve和resize1.2.5 insert和erase1.2.6 vector< char > 能否替代string 2. vector的模拟实现2.1 STL_vector源码浏览2.2 vector的…

网络安全-网站后台的寻找+网页JS文件信息收集

网络安全-网站后台的寻找网页JS文件信息收集 前言 一&#xff0c;我也是初学者记录的笔记 二&#xff0c;可能有错误的地方&#xff0c;请谨慎 三&#xff0c;欢迎各路大神指教 四&#xff0c;任何文章仅作为学习使用 五&#xff0c;学习网络安全知识请勿适用于违法行为 学习网…

数影周报:美联邦机构被曝数据泄露丑闻,嘀嗒狗完成数千万元融资

本周看点&#xff1a;美联邦下属机构超25万消费者隐私被泄露&#xff1b;钉钉、金山办公同日公布AI应用&#xff1b;京东全球购与宿迁市港口集团签订战略协议&#xff1b;嘀嗒狗完成数千万元Pre-A轮融资...... 数据安全那些事 美联邦机构被曝数据泄露丑闻 海外网4月20日电 据美…

DeepSORT中的卡尔曼滤波

本文是看了DeepSORT方法视频之后&#xff0c;关于其中使用的卡尔曼滤波的理解 DeepSORT视频链接 首先是视频中的一张图 预测阶段 x ^ k − A x ^ k − 1 \hat{x}_k^-A\hat{x}_{k-1} x^k−​Ax^k−1​ P k − A P k − 1 Q , P k − ∈ R 8 , 8 P_k^-AP_{k-1}Q, P_k^- \i…

Python轻量级Web框架Flask(10)——Flask进阶知识

1、Flask整体框架流程回顾&#xff1a; 视图函数把数据返回给浏览器的方法有多种&#xff0c;其中一种就是通过模板Templates。 2、Flask插件介绍&#xff1a; Flask插件可以去官网查看&#xff0c;有很多。插件安装流程&#xff1a; 1、通过pip指令在对应环境中下载插件2、在…

【Python入门】NumPy 入门知识介绍,看这一篇足矣

前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 什么是 NumPy&#xff1f; NumPy 是用于处理数组的 python 库。 它还拥有在线性代数、傅立叶变换和矩阵领域中工作的函数。 NumPy 由 Travis Oliphant 于 2005 年创建。它是一个开源项目&#xff0c;你可以自由使用它。 …

SAP 性能监控工具

SAP 体系结构可能很复杂&#xff0c;因为它由许多不同的元素和多层应用程序组成。每个元素都必须以最佳方式执行&#xff0c;以确保响应迅速且可靠的服务级别。管理如此复杂的系统可能非常艰巨&#xff0c;这就是为什么使用强大的SAP监控工具绝对必要的原因。 什么是 SAP 监控 …

安装autogpt中出现的问题及安装autogpt的小白教程

ImportError: DLL load failed while importing numpy_ops: The specified module could not be found 解决方案&#xff1a;Latest supported Visual C Redistributable downloads | Microsoft Learn 安装一下这个软件即可&#xff0c; 要安装 Auto-GPT&#xff0c;请按照下…

【Operating Systems:Three Easy Pieces 操作系统导论 】 4 ~ 6 章 (进程 | 进程 API | 受限直接执行)

【读书笔记】 Operating Systems:Three Easy Pieces 操作系统导论 第四章、 抽象 &#xff1a; 进程 4.1 什么是进程 ? 操作系统为正在运行的程序提供的抽象进程可以访问的内存&#xff08;称为地址空间&#xff0c;address space&#xff09; 是该进程的一部分。进程的机器…

python+nodejs+ssm+vue 基于协同过滤的旅游推荐系统

本文首先介绍了旅游推荐的发展背景与发展现状&#xff0c;然后遵循软件常规开发流程&#xff0c;首先针对系统选取适用的语言和开发平台&#xff0c;根据需求分析制定模块并设计数据库结构&#xff0c;再根据系统总体功能模块的设计绘制系统的功能模块图&#xff0c;流程图以及…

WPF教程(八)--数据绑定(1)

使用WPF可以很方便的设计出强大的用户界面&#xff0c;同时 WPF提供了数据绑定功能。WPF的数据绑定跟Winform与ASP.NET中的数据绑定功能类似&#xff0c;但也有所不同&#xff0c;在 WPF中以通过后台代码绑定、前台XAML中进行绑定&#xff0c;或者两者组合的方式进行数据绑定。…

VUE基本使用详解

目录 一、VUE框架原理 1. 了解VUE框架 2. VUE框架原理 3. MVC设计模式 4. MVVM设计模式 二、引入VUE框架 1. 本地引入 2. 网络引入 三、安装Vue插件 一、VUE框架原理 1. 了解VUE框架 vue 框架 是基于MVVM设计模式的前端框架&#xff0c;其中的Vue对象是MVVM设计模式中的VM视图…

JavaWeb——TCP协议的相关特性

目录 一、TCP 1、特性 2、确认应答 &#xff08;1&#xff09;、定义 &#xff08;2&#xff09;、原理 &#xff08;3&#xff09;、接收缓冲区 3、超时重传 &#xff08;1&#xff09;、丢包 &#xff08;2&#xff09;、定义 &#xff08;3&#xff09;、分类 二、…