mysql 如何避免索引失效

news2024/11/28 6:39:12

案例演示

建表及初始化数据

CREATE TABLE staffs
(
    id       INT PRIMARY KEY AUTO_INCREMENT,
    NAME     VARCHAR(24) NOT NULL DEFAULT '',
    age      INT         NOT NULL DEFAULT 0,
    pos      VARCHAR(20) NOT NULL DEFAULT '',#职位
    add_time TIMESTAMP   NOT NULL DEFAULT CURRENT_TIMESTAMP #入职日期
) 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());
INSERT INTO staffs(NAME, age, pos, add_time)
VALUES ('张三', 23, 'dev', NOW());

#建立复合索引
CREATE INDEX idx_staffs_nap ON staffs (name, age, pos);

1. 全值匹配: 筛选条件字段和复合索引的个数顺序完全相同。

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

image-20211004172447493

2. 最佳左前缀法则

筛选条件中必须有复合索引的第一个字段。并且不能跳过中间的字段。但是可以去掉最后的字段。

以上案例中,去掉条件中的name,或者去掉age,都会使索引失效。

即:带头大哥不能死,中间兄弟不能断。

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

比如如下条件中索引字段使用了函数,因此,索引全部失效。

EXPLAIN
SELECT *
FROM staffs
WHERE LEFT(name, 4) = 'July';

image-20211004175521149

4. 在筛选条件的索引列表中,范围筛选之后的索引会失效

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

image-20211004194756525

结果中可以看到name索引用到了。但是pos没有用到。

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

6. MySQL在使用不等于(!=或者<>)的时候无法使用索引会导致全表扫描

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

image-20211004195917103

7.IS NULL / IS NOT NULL无法使用索引

8.Like以通配符开头(‘%abc’)mysq索引失效会变成全表扫描的操作

image-20211004202444775

面试题:解决LIKE ’%X%‘时索引不被使用的方法?

答:使用覆盖索引,查询的字段覆盖创建的索引,即可。

image-20211004202422479

9.字符串不加单引号索引失效 (对应上边第三条)

image-20211004202609150

加上单引号 会发现走索引了

image-20211004202634053

10.少用or,用它来连接时会索引失效

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

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

相关文章

二维码在设备点维一体化管理中的应用

随着科技发展&#xff0c;设备点维一体化管理体系应运而生&#xff0c;该管理体系的出现让设备维护保养变得更加高效精细化。 设备点维一体化管理体系以设备点检和维护保养为基础&#xff0c;通过日常、专业及精密点检&#xff0c;对点检测得的数据和设备给油脂保养情况进行统…

一个开源、免费在线数据建模、元数据管理平台,简单易用

一、开源项目简介 ERD Online 是一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能&#xff0c;辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。 二、开源协议 …

全国各省份影像下载地址(11级别)

安徽省https://pan.baidu.com/s/1fMuWhVZFvSH1UlCGU1bPpA?pwdeasy澳门特别行政区https://pan.baidu.com/s/1aU2D4o2bfeHTJTb6AkUtVA?pwdeasy北京市https://pan.baidu.com/s/1eaNzAWm1pUx_rjhD_wHHhA?pwdeasy福建省百度网盘 请输入提取码甘肃省https://pan.baidu.com/s/1mAqf…

【Tools系列】IDA远程调试Linux文件

Date: 2023.4.28 文章目录 1、工具安装2、IDA+linux_server参考1、工具安装 IDA Pro 7.2 2、IDA+linux_server (1)进入到IDA的安装目录,找到文件夹/dbgsrv,其中有两个文件linux_server和linux_server64,分别为32位的服务端和64位的服务端,可根据调试目标进行选择。并将…

RocketMQ第二节(安装和模块详解)

目录 1&#xff1a;RocketMQ安装 1.1&#xff1a;下载安装包解压 1.2&#xff1a;修改运行配置 1.3&#xff1a;运行RocketMQ 1.3.1&#xff1a;启动NameServer 1.3.2&#xff1a;启动Broker 1.4&#xff1a;消息收发 1.5&#xff1a;服务关闭 2&#xff1a;RocketMQ模…

八部门联合推动IPv6创新发展 知道创宇助力IPv6快速安全改造

近日&#xff0c;工业和信息化部、中央网信办、国家发展改革委、教育部、交通运输部、人民银行、国务院国资委、国家能源局等八部门联合印发《关于推进IPv6技术演进和应用创新发展的实施意见》&#xff08;以下简称“《实施意见》”&#xff09;&#xff0c;提出到2025年底&…

换个花样玩C++(3)const_cast不是一行代码这么简单

我先不说const_cast的事情,还是回到我们之前遇到的一个问题,先看代码 示例1 #include <iostream> int main() {const int a = 1;int* p = (int*)(&a);*p = 100; std::cout << a; } 这段代码里,本来想通过指针p里修改a的值,vs调试看下来a的值在*p=100;这…

Elasticsearch --- 简介、安装

一、简介 1.1、elasticsearch的作用 elasticsearch是一款非常强大的开源搜索引擎&#xff0c;具备非常多强大功能&#xff0c;可以帮助我们从海量数据中快速找到需要的内容 例如&#xff1a; 在GitHub搜索代码 在电商网站搜索商品 在百度搜索答案 1.2、ELK技术栈 elas…

Linux安装helm

前言 运行环境&#xff1a;CentOS7.9 官方参考文档&#xff1a;官方文档 文章末尾附有一键安装脚本 下载安装包 github下载对应版本的安装包&#xff0c;下载地址 进入对应版本的下载页面&#xff0c;这里以v3.11.3为例 选择对应系统的安装包&#xff0c;这里以linux为例 …

WhatsApp CRM:通过 CRM WhatsApp 集成向客户发送消息

WhatsApp CRM&#xff1a;通过 CRM WhatsApp 集成向客户发送消息 你是否在寻找一个支持WhatsApp整合的CRM&#xff1f;或者&#xff0c;你想将WhatsApp与你当前的CRM整合&#xff1f;这篇文章将回答你所有的问题。我们将首先了解什么是WhatsApp CRM&#xff0c;以及你需要知道…

【Python】丘比特之箭,一箭穿心,快去发给你心仪的人叭~

作者主页&#xff1a;爱笑的男孩。的博客_CSDN博客-深度学习,活动,YOLO领域博主爱笑的男孩。擅长深度学习,活动,YOLO,等方面的知识,爱笑的男孩。关注算法,python,计算机视觉,图像处理,深度学习,pytorch,神经网络,opencv领域.https://blog.csdn.net/Code_and516?typeblog个人简…

20230428 -栈与队列1 | 232. 用栈实现队列、225. 用队列实现栈、Queue和Deque异同介绍

1、232. 用栈实现队列 class MyQueue {//整体实现思路&#xff1a;队列是先进先出&#xff0c;栈是先进后出。使用两个栈&#xff0c;一个栈A负责进&#xff0c;一个栈B负责接收栈A数据&#xff0c;然后出出&#xff0c;队列&#xff1a;A->B>C 栈A&#xff1a;A->B&g…

一分钟教你玩转组合图表

在日常工作中&#xff0c;有时候单一的图表类型无法满足多维度的数据展示&#xff0c;这时候就要考虑使用组合图表。 什么是组合图表呢&#xff1f; 就是将两种及两种以上的图表类型组合起来绘制在一个图表上。 下面我们通过经典的柱线组合图来手把手教会你如何制作组合图表。 …

ChatGLM LoRA微调实战方案

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

Kestrel封装在Winform中

Kestrel封装在Winform中 背景思路方法1方法2方法3&#xff08;本文使用的方法&#xff09; 实现在winform程序中引入几个nuget包新建一个Startup类&#xff08;叫什么名字都行&#xff09;修改Program文件创建controller 运行效果(打开浏览器&#xff0c;输入如下地址&#xff…

【高危】Apache Superset <2.1.0 认证绕过漏洞(POC)(CVE-2023-27524)

漏洞描述 Apache Superset 是一个开源的数据可视化和业务智能平台&#xff0c;可用于数据探索分析和数据可视化。 Apache Superset 受影响版本在使用默认的secret_key时&#xff0c;攻击者可通过默认的secret_key为任意用户生成有效的会话令牌&#xff0c;进而绕过验证造成信…

千耘导航让普通棉农享受到科技红利

孟师傅&#xff0c;新疆阿克苏一名普通的棉花种植户&#xff0c;从事农业20年&#xff0c;开拖拉机也有10多年&#xff0c;之前听过农机自动驾驶&#xff0c;但由于这里通信网络信号不太好&#xff0c;身边朋友使用农机导航效果不是特别理想&#xff0c;因此一直没享受到科技带…

【Python】Python学习笔记(六)字符串

字符串 基本操作 使用索引来读取字符串 Python允许使用正数或者负数来读取字符串中的某一个字符。 使用正数索引&#xff1a; #按顺序打印输出字符串内的所有字符。s ABCDEFGprint(s[0] , s[0]) print(s[1] , s[1]) print(s[2] , s[2]) print(s[3] , s[3]) print(s[4]…

计算机网络学习01

网络分层模型 1、OSI 七层模型是什么&#xff1f;每一层的作用是什么&#xff1f; OSI 七层模型 是国际标准化组织提出一个网络分层模型&#xff0c;其大体结构以及每一层提供的功能如下图所示&#xff1a; 每一层都专注做一件事情&#xff0c;并且每一层都需要使用下一层提…

【MySQL自学之路】第5天——对数据表数据的增删改查1

目录 前言 使用的数据库 数据表 ​编辑 表结构 插入数据&#xff08;insert into&#xff09; 插入一条数据 插入多条数据 修改数据&#xff08;update set&#xff09; 修改一条数据的值 ​编辑 修改多条数据的值 删除数据&#xff08;delete from&#xff09;…