1.索引失效

先创建符合索引,三个字段

ALTER table abilityassessrecord add INDEX idx_customerno_roomno_abilityassessrecord_customername (customerno,roomno,customername);

SHOW INDEX FROM abilityassessrecord; 

2简单使用索引

1)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE customerno = 1

索引生效,key_len长度为4,只用到了索引的的customerno字段

2)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE customerno = 1  AND roomno = 1

索引生效,key_len长度为12,用到了索引的的customerno和roomno字段

3)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE customerno = 1  AND roomno = 1 AND customername = 'aaa'

索引生效,key_len长度为75,用到了索引的的customerno和roomno和customername字段

3复合索引的第一个字段必须使用到

1)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE customerno = 1

索引生效,key_len长度为4,只用到了索引的的customerno字段

2)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE  roomno = 1 

没有用到索引。复合索引要生效的话,复合索引的第一个字段需要被使用到

3)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE  customername = 'aaa'

没有用到索引。复合索引要生效的话,复合索引的第一个字段需要被使用到

4索引字段需连续使用不断开

1)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE  customerno = 1 AND roomno = 1

索引生效,key_len长度为12,用到了索引的的customerno和roomno字段

2)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE  customerno = 1 AND customername = ''

索引生效,key_len长度为4,用到了索引的的customerno,但是customername没有用到。因为复合索引除了第一个字段需要被使用到,字段的使用需要连续(这里的连续是指按照插件索引时的三个字段的顺序,在条件里面哪个写在前面哪个写在后面不影响,只有用到了就行)。这里查询条件用到customerno和customername,但是索引中第二个字段roomno没有用到,断开了,索引只有customerno生效

3)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername = 'aaa' AND roomno  = 1  AND customerno = 1

索引以生效,三个字段都用到了,在条件里面哪个写在前面哪个写在后面不影响,只有用到了就行

4)示例

EXPLAIN SELECT * FROM abilityassessrecord WHERE  roomno = 1 AND customername = ''

没有用到索引,因为索引的第一个字段没有用到

5只查询索引字段

1)示例

EXPLAIN SELECT  * FROM abilityassessrecord 

没有用到索引,数据全文检索

2)示例

EXPLAIN SELECT customerno  FROM abilityassessrecord 
EXPLAIN SELECT roomno  FROM abilityassessrecord
EXPLAIN SELECT customername  FROM abilityassessrecord
EXPLAIN SELECT customerno,roomno  FROM abilityassessrecord
EXPLAIN SELECT customerno,customername  FROM abilityassessrecord
EXPLAIN SELECT roomno,customername  FROM abilityassessrecord
EXPLAIN SELECT customerno,roomno,customername  FROM abilityassessrecord

用到索引。这里由于查询的只是索引中包含的字段,所以可以直接在索引中查询返回,不用再去找数据表

3)示例

EXPLAIN SELECT customerno,roomno,customername,sex  FROM abilityassessrecord 

没有用到索引,效果和select*是一样的

4)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE customerno = 1

索引生效

6索引字段使用到计算、函数、类型转换会导致该字段及之后的字段失效

1)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE customerno+1 = 1

索引失效,条件里面索引字段使用到计算、函数、类型转换(手动或者自动的),会导致索引失效

2)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE MOD(customerno,2) = 1

索引失效,条件里面索引字段使用到计算、函数、类型转换(手动或者自动的),会导致索引失效

3)示例

EXPLAIN SELECT *,MOD(customerno,2) mo  FROM abilityassessrecord WHERE customerno = 1

索引生效,在select用到函数等不影响

4)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE customerno = 1 AND roomno = 1

索引生效,key_len为12,用到了customerno和roomno

5)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername = 'aaa' AND MOD(roomno,2)  = 1  AND customerno = 1

索引生效,key_len为4,因为roomno用到了函数,失效了,roomno它及它后面的customername 也跟着失效

7索引字段使用到!=、<>会导致该字段之后的字段失效

1)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername = 'aaa' AND roomno != 1  AND customerno = 1

索引生效,key_len124,用到了customerno和roomno,customername失效

8索引字段使用到is not null会导致该字段和之后的字段失效

1)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername = 'aaa' AND roomno is not null  AND customerno = 1

索引生效,用到了customerno字段,roomno和customername失效

2)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername  is null AND roomno = 1  AND customerno = 1

索引生效,三个字段都用到了,is null不影响索引的使用

9索引字段模糊查询like使用%开头会导致该字段和之后的字段失效

1)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE    customername  like '%aa%' AND roomno = 1  AND customerno = 1

索引生效,用到了customerno和roomno字段,roomno和customername失效

2)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE   customername  like 'aa%' AND roomno = 1  AND customerno = 1

索引生效,三个字段都用到了

10使用or索引失效

1)示例

EXPLAIN SELECT *  FROM abilityassessrecord WHERE customerno = 1 AND roomno = 1 or customername   = 'aa'

索引失效

mysql14 sql优化-索引失效的更多相关文章

  1. 「MySQL高级篇」explain分析SQL,索引失效&&常见优化场景

    大家好,我是melo,一名大三后台练习生 专栏回顾 索引的原理&&设计原则 欢迎关注本专栏:MySQL高级篇 本篇速览 在我们上一篇文章中,讲到了索引的原理&&设计原则 ...

  2. 160531、SQL优化-索引

    SQL优化有很多方法,今天来说一说数据库索引. 举例说明: 假设有一个图书Book表,里面有字段id,name, isbn等.如果图书数量巨大的话,我们通过isbn查询通常是比较慢的. 添加数据库索引 ...

  3. SQL优化-索引

    (一)深入浅出理解索引结构 实际上,您可以把索引理解为一种特殊的目录.微软的SQL SERVER提供了两种索引:聚集索引(clustered index,也称聚类索引.簇集索引)和非聚集索引(nonc ...

  4. mysql 开发进阶篇系列 3 SQL 优化(索引使用方法)

    一. 本章介绍mysql中的索引的分类,存储,使用方法的介绍 1.  索引的存储分类 MyISAM存储引擎的表的数据和索引是自动分开存储的,各自是独立的一个文件, innodb 存储引擎的表的数据和索 ...

  5. Oracle sql 优化の索引监控

    1.监视索引是否使用 除了主键是完整性约束而自动变为索引外,创建普通索引的目的就是为了提高查询速度,如果我们创建了索引而没有被使用,那么这些不被使用的索引将起到阻碍性能的作用. 语法: --检查某个索 ...

  6. sql优化,索引学习

  7. mybatis的sql语句导致索引失效,使得查询超时

    mybaitis书写sql需要特别注意where条件中的语句,否则将会导致索引失效,使得查询总是超时.如下语句会出现导致索引失效的情况: with test1 as (select count(C_F ...

  8. 数据库sql优化总结之3--SQL优化总结

    SQL是每个Java程序员必回的一项技能,  对于项目中的各种复杂业务, 你是否能写出高效率, 简洁的SQL对于项目的运行效率和稳定性是有非常大的作用的. 通过个人的理解和网上的资料总结了一下常见的S ...

  9. 数据库的规范和SQL优化技巧总结

    现总结工作与学习中关于数据库的规范设计与优化技巧 1.规范背景与目的 MySQL数据库与 Oracle. SQL Server 等数据库相比,有其内核上的优势与劣势.我们在使用MySQL数据库的时候需 ...

  10. sql优化策略之索引失效情况二

    详见: http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytp63   接第一篇索引失效分析:http://grefr.iteye.co ...

随机推荐

  1. ElasticSearch深度分页详解

    1 前言 ElasticSearch是一个实时的分布式搜索与分析引擎,常用于大量非结构化数据的存储和快速检索场景,具有很强的扩展性.纵使其有诸多优点,在搜索领域远超关系型数据库,但依然存在与关系型数据 ...

  2. 【云原生 · Kubernetes】Kubernetes容器云平台部署与运维

    [题目1]Deployment管理 在master节点/root目录下编写yaml文件nginx-deployment.yaml,具体要求如下: (1)Deployment名称:nginx-deplo ...

  3. 整理 js 日期对象的详细功能,使用 js 日期对象获取具体日期、昨天、今天、明天、每月天数、时间戳等,以及常用的日期时间处理方法

    在 javascript 中内置了一个 Date 对象,可用于实现一些日期和时间的操作. 本文整理 js 日期对象的详细功能,使用 js 日期对象获取具体日期.昨天.今天.明天.每月天数.时间戳等,以 ...

  4. 20W,PD快充协议芯片,带有PPS控制器的USB-PD3.0

    JD6621是高度集成的USB供电(PD)控制器,支持USB PD 3.0 ,该USB PD 3.0 具有针对USB Type-C下游接口(源)设计的可编程电源( PPS)规范. 它监视CC引脚以检测 ...

  5. node版本管理工具fnm踩坑

    我建议是直接不要用fnm,还是老老实实用nvm吧 fnm下下来电脑防火墙会报毒(用github上推荐的cargo install fnm方式下载,并非第三方安装) Trojan.Generic.HgE ...

  6. 爬了10000张NASA关于火星探索的图片,我发现了一个秘密

    前言 最近,我使用爬虫技术,爬取了美国航空航天局,也就是你电影里经常见到的 NASA, 火星探索的相关图片,有 10000 张吧. 嗯嗯,小事情,小事情. 完事儿之后,有点小激动,于是就有了这篇文章, ...

  7. 一文带你搞懂 Google 发布的新开源项目 GUAC

    随着软件供应链攻击的显著增加,以及 Log4j 漏洞带来的灾难性后果和影响,软件供应链面临的风险已经成为网络安全生态系统共同关注的最重要话题之一.根据业内权威机构 Sonatype 发布的2022软件 ...

  8. 配置文件 数据库存储引擎 严格模式 MySQL字段基本数据类型

    目录 字符编码与配置文件 \s查看MySQL相关信息 修改配置文件my-default.ini 解决5.6版本字符编码问题 配置文件什么时候加载? 偷懒操作:输入mysql直接登录root账户 数据库 ...

  9. 现代 CSS 高阶技巧,完美的波浪进度条效果!

    本文是 CSS Houdini 之 CSS Painting API 系列第三篇. 现代 CSS 之高阶图片渐隐消失术 现代 CSS 高阶技巧,像 Canvas 一样自由绘图构建样式! 在上两篇中,我 ...

  10. [数据与分析可视化] D3入门教程1-d3基础知识

    d3.js入门教程1-d3基础知识 文章目录 d3.js入门教程1-d3基础知识 1 HTML介绍 1.1 什么是HTML? 1.2 自定义文档样式CSS 1.3 构建svg图形 2 d3绘图入门 2 ...