mysql索引实现

什么是索引失效

在MySQL中,索引失效指的是查询语句无法有效地使用索引,而必须进行全表扫描。索引失效可能会导致查询性能下降,特别是在处理大量数据时。

索引失效的原因

1.索引列进行了运算或函数操作
如果对索引列进行了运算或使用了函数,MySQL无法使用索引,会导致索引失效。例如,对于以下查询语句:

SELECT * FROM table_name WHERE YEAR(date_column) = 2022;

如果date_column是索引列,但由于使用了YEAR函数,索引失效。
使用了不匹配索引的LIKE查询:

2.当使用LIKE进行模糊查询时,如果通配符在开头,MySQL无法使用索引。例如,对于以下查询语句:

SELECT * FROM table_name WHERE column_name LIKE '%value%';

索引失效。
3.类型不匹配
当查询条件的数据类型与索引列的数据类型不匹配时,MySQL无法使用索引。例如,对于以下查询语句:

SELECT * FROM table_name WHERE int_column = 'value';

如果int_column是整数类型的索引列,但查询条件是字符串类型,会导致索引失效。
4.范围查询中的左前缀:

当使用范围查询时,如果索引列只在范围的右边,MySQL无法使用索引。例如,对于以下查询语句:

SELECT * FROM table_name WHERE indexed_column > 10 AND non_indexed_column = 'value';

索引失效。
5.使用OR连接的条件

当查询条件中使用了OR连接多个条件时,如果其中有一个条件无法使用索引,整个查询可能会导致索引失效。例如,对于以下查询语句:

SELECT * FROM table_name WHERE indexed_column = 'value1' OR non_indexed_column = 'value2';

如果non_indexed_column未创建索引,整个查询可能会导致索引失效。

创建测试表和数据
为了演示和测试那种情况下会导致索引失效,我们先创建一个测试表和相应的数据:

– 创建表

drop table if exists student;
create table student(
  id int primary key auto_increment comment '主键',
  sn varchar(32) comment '学号',
  name varchar(250) comment '姓名',
  age int comment '年龄',
  sex bit comment '性别',
  address varchar(250) comment '家庭地址',
  key idx_address (address),
  key idx_sn_name_age (sn,name,age)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;
-- 添加测试数据
insert into student(id,sn,name,age,sex,address) 
  values(1,'cn001','张三',18,1,'高老庄'),
  (2,'cn002','李四',20,0,'花果山'),
  (3,'cn003','王五',50,1,'水帘洞');

当前表中总共有 3 个索引,如下图所示:
在这里插入图片描述

PS:本文以下内容基于 MySQL 5.7 InnoDB 数据引擎下。

索引失效情况1:非最左匹配
最左匹配原则指的是,以最左边的为起点字段查询可以使用联合索引,否则将不能使用联合索引。
我们本文的联合索引的字段顺序是 sn + name + age,我们假设它们的顺序是 A + B + C,以下联合索引的使用情况如下:
在这里插入图片描述

从上述结果可以看出,如果是以最左边开始匹配的字段都可以使用上联合索引,比如:

A+B+C

A+B

A+C

其中:A 等于字段 sn,B 等于字段 name,C 等于字段 age。

而 B+C 却不能使用到联合索引,这就是最左匹配原则。

索引失效情况2:错误模糊查询
模糊查询 like 的常见用法有 3 种:

模糊匹配后面任意字符:like ‘张%’
模糊匹配前面任意字符:like ‘%张’
模糊匹配前后任意字符:like ‘%张%’
而这 3 种模糊查询中只有第 1 种查询方式可以使用到索引,具体执行结果如下:
在这里插入图片描述

索引失效情况3:列运算
如果索引列使用了运算,那么索引也会失效,如下图所示:
在这里插入图片描述

索引失效情况4:使用函数
查询列如果使用任意 MySQL 提供的函数就会导致索引失效,比如以下列使用了 ifnull 函数之后的执行计划如下:
在这里插入图片描述

索引失效情况5:类型转换
如果索引列存在类型转换,那么也不会走索引,比如 address 为字符串类型,而查询的时候设置了 int 类型的值就会导致索引失效,如下图所示:
在这里插入图片描述

索引失效情况6:使用 is not null
当在查询中使用了 is not null 也会导致索引失效,而 is null 则会正常触发索引的,如下图所示:
在这里插入图片描述

总结
导致 MySQL 索引失效的常见场景有以下 6 种:
联合索引不满足最左匹配原则。
模糊查询最前面的为不确定匹配字符。
索引列参与了运算。
索引列使用了函数。
索引列存在类型转换。
索引列使用 is not null 查询。

怎么排查索引失效

1.执行计划分析:
使用 EXPLAIN 关键字可以查看 MySQL 的查询执行计划。执行 EXPLAIN SELECT … 查询可以得到查询计划的详细信息,包括 MySQL 是否使用了索引,以及索引的选择情况。通过分析执行计划,可以确定是否出现了索引失效的情况。
2.使用索引提示:
如果 MySQL 没有选择正确的索引,可以使用索引提示来强制 MySQL 使用指定的索引。可以在查询语句中使用 USE INDEX 或 FORCE INDEX 关键字来指定要使用的索引,从而排除索引失效的可能性。
3.查看慢查询日志:
如果查询执行时间较长,可能会被记录在 MySQL 的慢查询日志中。可以查看慢查询日志,找出执行时间较长的查询语句,并分析其执行计划和索引使用情况。
4.检查查询条件和索引定义:
检查查询语句中的条件是否能够利用索引。例如,是否存在类型不匹配、使用了函数、使用了 LIKE 模糊查询等情况。同时,检查索引的定义是否覆盖了查询语句中的所有条件。
5.使用性能分析工具:
使用 MySQL 提供的性能分析工具,如 pt-query-digest、mysqldumpslow 等,可以帮助分析查询的执行情况,找出可能导致索引失效的原因。
6.查看数据库配置:
检查 MySQL 数据库的配置文件,查看是否开启了合适的优化选项,如 optimizer_switch 参数中的各种优化器选项,以及 innodb_buffer_pool_size 参数等。正确的配置可以提高索引的利用率,降低索引失效的概率。

怎么避免索引失效

尽量避免对索引列进行运算或函数操作。
尽量避免使用不匹配索引的LIKE查询。
确保查询条件的数据类型与索引列的数据类型匹配。
尽量避免在范围查询中将索引列放在范围的右边。
尽量避免使用OR连接多个条件。

参考链接https://www.cnblogs.com/vipstone/p/16415441.html

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

第十届电气工程、控制和机器人技术国际会议(ICRAS 2024)即将召开!

2024年第十届电气工程、控制和机器人技术国际会议(ICRAS 2024)将于2024年6月21日至23日在日本东京举行。本次会议由中国地质大学(武汉)和北京控制机器人与智能技术研究所主办。ICRAS 2024旨在聚集来自世界各地的教授、研究人员、学…

遇到大量的照片需要尺寸调整怎么办?跟着小编往下看 轻松帮你解决照片尺寸修改的烦恼

在日常的摄影后期处理中,我们可能会遇到需要将大量照片上传至社交媒体、制作相册、或者进行打印等需求。不同的平台或用途对照片的尺寸有不同的要求,因此我们需要对照片的尺寸进行调整以满足这些要求。此外,随着手机、相机等设备的普及&#…

开源问卷调查系统

Java Vue 开源问卷调查系统 附项目地址 Astar问卷调查系统 基于SpringBootVue前后端分离的问卷调查系统 平台简介 本项目旨在提供一个简单易用的问卷调查平台,帮助用户创建、分享问卷,并收集、分析调查数据。我们希望能够为各行各业的调查需求提供一种…

【python】python结合js逆向,让有道翻译成为你的翻译官,实现本地免费实时翻译

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者等等。 🏆《博客》:Python全栈,前后端开发,人工智能,js逆向,A…

理清大数据技术与架构

大数据并不是一个系统软件,更不是一个单一的软件,它实际上是一种技术体系、一种数据处理方法,甚至可以说是一个服务平台。在这个技术体系中,涵盖了许多不同的部件,比如Hadoop服务平台。这一服务平台可以根据具体情况自…

管理类联考–复试–英文面试–问题–WhatWhyHow--纯英文汇总版

文章目录 Do you have any hobbies? What are you interested in? What do you usually do in your spare time? Could you tell me something about your family? Could you briefly introduce your family? What is your hometown like? Please tell me so…

复旦发布层次性奖励学习框架,增强大模型人类偏好对齐

在人工智能领域,强化学习(Reinforcement Learning, RL)一直是实现智能体自主学习的关键技术之一。通过与环境的交互,智能体能够自我优化其行为策略,以获得更多的奖励。然而,当涉及到复杂的人类偏好时&#…

顶顶通呼叫中心中间件-机器人话术编辑器意向问题详解

文章目录 前言联系我们意向页面和分类页面的区别意向权重意向权重的计算意向权重的作用 分类规则如何分类 前言 顶顶通旗下有一款机器人话术可视化编辑工具,可以根据用户的需求编辑话术流程。针对该话术编辑工具的意向功能进行讲解: 机器人话术可视化工…

案例练习:敲桌子

大家好: 衷心希望各位点赞。 您的问题请留在评论区,我会及时回答。 案例描述 从1开始数到数字100,如果数字的个位含有7,或者数字是7的倍数,我们打印输出“敲桌子”,其余数字直接打印输出。 代码 #includ…

婴儿洗衣机硬核测评:希亦、鲸立、小吉婴儿洗衣机性能大比拼!

如果你非常注重婴儿衣物的卫生问题,那么婴儿洗衣机则是非常理想的选择。毕竟,在婴儿吃奶或者接触其他材料时,其抵抗力是比较弱的,再加上普通洗衣机无法对婴儿的衣物进行有效的消毒处理,轻则会对婴儿的健康造成威胁&…

libVLC windows开发环境搭建

1.简介 LibVLC是一个强大的开源库,它构成了VLC媒体播放器的核心部分。 LibVLC提供了一系列的功能接口,使得VLC能够处理流媒体的接入、音频和视频输出、插件管理以及线程系统等核心任务。 跨平台性:VLC作为一个跨平台的多媒体播放器&#x…

设计师最常用的UI设计软件

无论您的设计侧重于用户体验设计还是用户界面设计,您都需要一个高效的界面设计工具来帮助您完成设计项目。根据设计的不同界面功能,合适的 UI 界面设计工具也会有所不同。本文总结了市场上 5 款流行的界面设计软件。每个界面设计工具都有自己的优点和缺点…

DevEco Studio 项目创建

安装DevEco Studio后开始使用,双击桌面DevEco Studio 快捷方式弹出界面: 选择Application —> Empty Ability,点击Next 项目配置 Project name:工程的名称,可以自定义,由大小写字母、数字和下划线组成。…

HarmonyOS NEXT应用开发之听歌识曲水波纹特效案例

介绍 在很多应用中,会出现点击按钮出现水波纹的特效。 效果图预览 使用说明 进入页面,点击按钮,触发水波纹动画。再次点击按钮,停止水波纹动画。 实现思路 本例涉及的关键特性和实现方案如下: 要实现存在两个连续…

vue el-table 前端js实现导出数据为Excel

目录 一、背景描述 二、功能分析 三、详细开发 1.导出为excel 2.导出为cvs 四、总结 一、背景描述 有些业务常见,例如前端已经获取到表格的所有数据了,并且后端技术人员比较繁忙,总会提出前端分页,前端排序,甚至…

CycleGAN训练及测试过程细节记录

CycleGAN训练及测试过程细节记录 文章目录 关于训练关于测试 关于训练 1、训练前将数据配置好,并在Pycharm中写好配置信息 2、关于训练过程的参数配置在 options/train_options.py options/base_options.py batch_size:批大小 crop_size:…

Vue.js前端开发零基础教学(一)

目录 第一章 初识Vue.js 前言 开发的好处 一.前端技术的发展 什么是单页Web应用? 二. Vue的简介 三. Vue的特性 四. Vue的版本 五.常见的包管理 六.安装node环境 第一章 初识Vue.js 学习目标: 了解前端技术的发展 了解什么是Vue掌握使用方…

凡事不以规矩不成方圆,合同协议模板范本大全

一、资料描述 本套合同协议资料,大小18.42M,24个压缩文件。 二、资料目录 01-租赁合同.rar(112个文件) 02-装修协议.rar(32个文件) 03-转让或承包协议.rar(32个文件) 04-员工手…

羊大师揭秘,孩子适不适合喝羊奶?

羊大师揭秘,孩子适不适合喝羊奶? 羊奶,这个古老而珍贵的营养饮品,近年来在家长们中间逐渐走红。它以其独特的营养价值和口感受到了众多家庭的青睐。但是,面对市面上琳琅满目的羊奶产品,家长们常常陷入选择…

ViT如何支持变长序列(patches)输入?

问题:当增加输入图像的分辨率时,例如DeiT 从 224 到 384,一般来说会保持 patch size(例如9),因此 patch 的数量 N 会发生了变化。那么视觉transformer是如何处理变长序列输入的? 回答: 在讨论…