MySQL--索引失效的各种情况举例分析(一)

MySQL索引失效的几种情况 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站,这篇文章男女通用,看懂了就去分享给你的码吧。借助 explain 执行计划来分析索引失效的具体场景。explain 使用如下,只需要在查询的 SQL 前面添加上 explain 关键字即可。示例:以上查询结果的列中,我们最主要观察 key 这一列,key 这一列表示实际使用的索引,如果为 NULL 则表示未使用索引,反之则使用了索引。 阅读详情

索引失效

建表及准备数据:

CREATE TABLE `staffs`(
`id` INT PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(24) NOT NULL DEFAULT '' COMMENT '姓名',
`age` INT NOT NULL DEFAULT 0 COMMENT '年龄',
`pos` VARCHAR(20) NOT NULL DEFAULT '' COMMENT '职位',
`add_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '入职时间'
)CHARSET utf8 COMMENT '员工记录表';


INSERT INTO staffs(`name`,age,pos,add_time) VALUES('z3',22,'manager',NOW());
INSERT INTO staffs(`name`,age,pos,add_time) VALUES('July',23,'dev',NOW());
INSERT INTO staffs(`name`,age,pos,add_time) VALUES('2000',23,'dev',NOW());

SELECT * from staffs;

ALTER TABLE staffs ADD INDEX idx_staffs_nameAgePos(`name`,age,pos);

在这里插入图片描述

在这里插入图片描述

  • 全值匹配
  • 最佳左前缀法则
  • 不再索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描
  • 存储引擎不能使用索引中范围条件右边的列
  • 尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少SELECT *
  • mysql在使用不等于(!= 或 <>)的时候无法使用索引会导致全表扫描
  • is null, is not null 也无法使用索引
  • like 以通配符开头(’%abc…’)mysql索引失效会变成全表扫描的操作
  • 字符串不加单引号索引失效
  • 少用or,用它来连接时会索引失效

全值匹配

EXPLAIN SELECT * FROM staffs WHERE name = 'July';

在这里插入图片描述```sql
EXPLAIN SELECT * FROM staffs WHERE name = ‘July’ AND age = 25;

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191124190434151.png)

```sql
EXPLAIN SELECT * FROM staffs WHERE name = 'July' AND age = 25 AND pos = 'dev';

在这里插入图片描述
以上三种情况都可以用到索引

EXPLAIN SELECT * FROM staffs WHERE age = 23 AND pos = 'dev';

在这里插入图片描述

EXPLAIN SELECT * FROM staffs WHERE pos = 'dev';

在这里插入图片描述
以上两种情况索引失效了。。。违背了左前缀法则

在这里插入图片描述

不再索引列上做任何操作(计算、函数、(自动or手动)类型转换),会导致索引失效而转向全表扫描

EXPLAIN SELECT * FROM staffs WHERE LEFT(name,4) = 'July';
#left是一个函数,就是字符串截取的作用

在这里插入图片描述

结论:原来的name加上left(name,4)之后,索引就失效了

存储引擎不能使用索引中范围条件右边的列


EXPLAIN SELECT * FROM staffs WHERE name = 'July' AND age > 25 and pos = 'manager';

在这里插入图片描述

在这里插入图片描述

尽量使用覆盖索引(只访问索引的查询(索引列和查询列一致)),减少SELECT *

在这里插入图片描述

在这里插入图片描述

基于python的超市历年数据可视化分析 包含:Order_Date Sales Quantity Profit year month。所有这些物品都在美国4个地区的49个州销售,来着793位客户的5009个订单。9994行,21列数据。 阅读详情

相关推荐

ANSYS Twin Builder实战:5步搞定数字孪生模型部署(附ROM配置技巧)

本文详细解析了ANSYS Twin Builder在数字孪生模型部署中的实战应用,重点介绍了ROM(降阶模型)配置技巧。通过5个关键步骤,从环境搭建到工业部署,帮助工程师高效实现高精度三维仿真到轻量化数字孪生的转化,提升预测性维护和系统仿真效率。

weixin_27330481的博客 661

Mysql索引失效场景

Mysql索引失效场景

李逍遥 992

优化求解器性能:当分支切割算法中的gap停滞不前时如何应对

本文深入探讨了当分支切割算法求解复杂整数规划问题时,gap停滞不前的根本原因与应对策略。文章指出gap停滞源于上界(找不到更优整数解)或下界(证明过程缓慢)提升受阻,并提供了从模型改写、自定义割平面、调整搜索策略到参数调优等一系列实战方法,帮助优化工程师有效打破求解僵局,推动gap下降。

weixin_29294597的博客 381

15个必知的Mysql索引失效场景,别再踩坑了!

无论你是技术大佬,还是刚入行的小白,时不时都会踩到Mysql数据库不走索引的坑。常见的现象就是:明明在字段上添加了索引,但却并未生效。前些天就遇到一个稍微特殊的场景,同一条SQL语句,在某些参数下生效,在某些参数下不生效,这是为什么呢?另外,无论是面试或是日常,Mysql索引失效的通常情况都应该了解和学习。为了方便学习和记忆,这篇文件将常见的15种不走索引情况进行汇总,并以实例展示,帮助大家更好地避免踩坑。建议收藏,以备不时之需。为了逐项验证索引的使用情况,我们先准备一张表t_user: 在上述表结构中

m0_71777195的博客 834

单电源运放偏置电压设计:如何避免信号失真

本文详细解析了单电源运放偏置电压设计的关键技术,以LM358为例,探讨如何通过1/2 VCC偏置避免信号失真。文章从基本原理出发,揭示了双端偏置的黄金法则,并提供了常见设计陷阱的解决方案和进阶调试技巧,帮助工程师实现高保真信号放大。

weixin_29266647的博客 293

基于LORA的双机通信的智能农业系统

通过LoRa模块与主机进行通信,监测环境中的温度、湿度、土壤湿度和光照强度等参数,并根据预设的自动控制逻辑或者手动指令控制继电器开关,从而调节风扇、加热器、水泵、喷雾器和灯光等设备,为植物提供适宜的生长环境。使用的Lora是大夏龙雀的感觉这个是我使用过的Lora里面最好用的,因为不用设置频道就可以直接透明传输,使用起来得心应手。就像两个单片机直接串口通信一样,缺点是异步串行,不能同时进行接收和发送。继电器灯亮模拟打开对应的风扇、水泵、灯、喷雾、加热。1.使用温度传感器测当前环境的温湿度。

ssjsjss的博客 1739

【示例】MySQL-索引失效的情况

本文主要讲述MySQL中索引失效的常见情况。

HMTeen 607

什么是 SAP PCE?

SAP Private Cloud Edition 是一种基于云计算的部署模式,它结合了公有云的灵活性和私有云的安全性,为企业提供了量身定制的云服务。在 PCE 环境中,SAP 托管和维护客户的应用系统(如 SAP S/4HANA、SAP SuccessFactors 或 SAP BW/4HANA),同时客户拥有更高的定制化权限。专属环境:每个客户在云中拥有独立的资源,这保障了更高的安全性和性能。全面托管:SAP 提供基础架构、系统管理和更新服务,降低了客户的运维成本。灵活扩展。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 2246

索引失效的10种场景,你知道几个呢?(面试必刷!)

不知道你在实际工作中,有没有遇到过下面的这两种情况:明明在某个字段上加了索引,但实际上并没有生效。索引有时候生效了,有时候没有生效。今天就跟大家一起聊聊,mysql数据库索引失效的10种场景,给曾经踩过坑,或者即将要踩坑的朋友们一个参考。

慢慢来,谁还没有一个努力的过程。 1万+

【推荐100个unity插件】将UE的资源导出到unity使用—— Exporter for Unreal to/for Unity插件

Unreal to Unity导出器是一款帮助开发者将Unreal Engine项目转换为Unity的工具。文章详细介绍了使用步骤:1)安装虚幻引擎并创建项目;2)在Plugins文件夹中安装导出插件;3)导入UE资产到Content文件夹;4)配置导出参数并完成转换。文末推荐了多个Unity开发专栏,涵盖C#编程、2D/3D开发、特效制作等内容。作者向宇提供了博客地址,欢迎读者交流学习。该工具能有效提升项目迁移效率,适合需要跨引擎开发的用户使用。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 851

安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案

本文主要介绍了安装openclaw时出现node.exe : npm error code EIDLETIMEOUT的解决方案,希望能对学习使用openclaw的同学们有所帮助。 文章目录 1. 问题描述 2. 解决方案

weixin_43178406的博客 11万+

索引失效的10种场景

当。

weixin_55076626的博客 1万+

摆脱英文束缚!群晖Transmission4.0.4全新中文界面攻略

在群晖安装完官方Transmission4.0.4套件后,界面是英文状态的,不太好用。但是按照网上分享的原来4.0以前版本的方法更新UI又失败,所以自己搞了下成功了,分享给需要的朋友。

XiaoqiangClub的博客 5216

MySQL中什么情况下会出现索引失效?如何排查索引失效?

在MySQL中,索引是用来加快检索数据库记录的一种数据结构。索引失效指的是在进行查询操作时,本应该使用索引来提升查询效率的场景下,数据库没有利用索引,而是采用了全表扫描的方式,这会大大增加查询时间和系统负担。MySQL中什么情况下会出现索引失效?如何排查索引失效?回答。

weixin_44382896的博客 8201

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

MySQL之索引失效情况

文章目录1 MySQL索引1.1 简介1.1.1 索引创建1.1.2 索引类型1.1.3 索引优缺点1.2 SQL优化1.2.1 查看执行计划1.2.2 show profile分析1.2.3 trace2 索引失效2.1 问题引入2.2 准备工作2.2.1 创建user表2.2.2 插入数据2.2.3 查看数据库版本2.3 联合索引2.3.1 联合索引中索引有效2.3.2 联合索引中索引失效2.4 select *2.5 索引列上有计算2.6 索引列用了函数2.7 字段类型不同2.8 like左边包含%2

上善若泪 8823

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

MySQL高级篇——索引失效的11种情况

索引优化思路、要尽量满足全值匹配、最佳左前缀法则、主键插入顺序尽量自增、计算、函数导致索引失效、类型转换(手动或自动)导致索引失效、范围条件右边的列索引失效、不等于符号导致索引失效、is not null、not like无法使用索引、左模糊查询导致索引失效、“OR”前后存在非索引列,导致索引失效、不同字符集导致索引失败,建议utf8mb4

种一棵树最好的时间是十年前,其次是现在 3万+

详解MySQL索引失效的几种情况

MySQL索引失效的几种情况

m0_57614677的博客 1万+

【MySQL 进阶之路】索引失效的11种情况

在MySQL的查询优化中,索引是一项至关重要的技术,它能够大大提升数据检索的效率。本文将讨论这11种常见情况,帮助开发者更好地理解索引的使用及优化。

ajsbxi的博客 3228

MySQL索引失效的情况

摘要:本文分析了导致MySQL索引失效的常见情况,包括:1)对索引列使用函数或表达式;2)隐式类型转换;3)LIKE以通配符开头的查询;4)违反联合索引最左前缀原则。重点阐述了联合索引的工作原理,说明查询必须包含最左列才能有效利用索引,否则会导致索引失效。同时解释了B+树索引结构决定了前缀匹配的高效性和后缀匹配的低效性。这些知识对优化SQL查询性能具有重要指导意义。

Z2076465172的博客 2449

MySQL中索引失效的情况分析

MySQL中索引失效的情况分析

m0_56615376的博客 980

索引失效的情况及分析

当在查询条件中对索引列使用函数或表达式时,索引可能会失效。例如,在 MySQL 中,如果对一个整数类型的索引列使用ABS()函数进行查询,数据库无法直接使用索引来快速定位数据,而是需要对表中的每一行数据应用函数后再进行比较。示例:假设一个用户表中有一个年龄列age,并且在age列上创建了索引。如果执行以下查询:在这种情况下,索引可能无法被有效利用,因为ABS()函数对age列进行了操作,数据库需要计算每一行的ABS(age)值后再与 30 进行比较,而不是直接通过索引查找age = 30或。

m0_57836225的博客 1487

索引失效的几种情况

索引失效 本文参考尚硅谷视频 口诀:带头大哥不能死,中间兄都不能断,索引列上无操作,范围右边全失效,like百分加右边,字符串中有引号 准备: 建立员工记录表staffs(id,name,age,pos,add_time) 给表中name,age,pos字段添加索引(注意三个字段的顺序) alter table staff add index idx_staffs_nameAgePos(name,age,pos) ①最佳左前缀法则 指的是查询从索引的最左前列开始并且不跳过索引中的列 (带头大哥不能死,中间

suo_jia_hao的博客 1万+

【MySQL高级】MySQL索引失效情况及避免方式【案例分析】

了解Mysql常见的索引失效方式,及其避免方法(尚硅谷课程学习笔记)

我只管埋头前行,剩下的交给时间。 2507

MYSQL索引失效的几种情况

MySQL索引的建立对于MySQL的高效运行是很重要的,索引可以大大提高MySQL的检索速度。但是,有时候常常会明明建了索引,查询结果却没有使用到索引的情况。那么就说明索引失效。以下就列举出几种索引失效的情况: 在举例之前,先简单的介绍一下MySQL中的explain,explain这个命令可以查看SQL语句的执行计划,结果如图所示: id: SELECT 查询的标识符. 每个 SELECT ...

裸奔的小强的博客 4472

mysql索引失效的五种情况

这个是针对联合索引的。假设有个tb_seller表,现在给三个字段建立联合索引,建立的时候字段顺序不可随便设置,字段顺序: name, status, address。下图Seq_in_index对应的是联合索引顺序。判断索引失效用不懂这个可以先看我另外一篇文章最左前缀法则定义如果索引了多列,要遵守最左前缀法则。指的是查询从索引的最左前列开始,并且不跳过索引中的列。匹配最左前缀法则,走索引:现在如下图,根据最左前缀法则执行三个语句,来看看字段是否走索引。

weixin_52136521的博客 1249

MySQL索引优化及索引失效的情况

本文详细介绍了MySQL索引的优化技巧,并讨论了一些索引失效的情况及解决方法。合理的索引设计可以大大提高查询性能,减少数据库的IO操作,从而提升整个系统的性能。在使用索引时,需要选择合适的索引列、合理设置索引长度、合理使用复合索引、避免使用过多的索引,并定期分析和优化索引。同时,需要注意一些索引失效的情况,并采取相应的解决方法。通过合理的索引设计和优化,可以提高数据库查询的效率,提升系统的性能。

一位努力搬砖程序员。在这里,我会分享关于编程技巧、项目实战经验以及对新技术的见解。希望通过我的文章能够帮助你在技术路上更进一步。期待与你共同学习和成长! 1407

MySQL中什么情况下类型转换会导致索引失效

MySQL中什么情况下类型转换会导致索引失效

聂可以的博客 1654
上一篇: MySQL--索引失效的各种情况举例分析(二)
下一篇: MySQL--索引面试题分析
吴声子夜歌
博客等级 码龄9年 2688粉丝 2268原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值