MySQL有时候命中索引有时候又不命中

索引失效的情况 -----可能
索引主要看where 、group by 、order by
1.组合索引不遵循最佳左前缀法制。最佳左前缀法制:如果索引了多列,要遵循最左前缀法则,指的是查询从索引的最左前列开始并且不跳过索引中的列。如组合索引为A B C 只有ABC,AB,AC,A会名中组合索引,命中数量不一样分别是3,2,1,1命中数量越多查询性能越好
2.不在索引列上做任何计算、函数操作,会导致索引失效而转向全表扫描。
3.存储引擎不能使用索引中范围条件右边的列。如组合索引为A B C ,where A=0 and B>100 and C=7 只会命中 AB
4.MySQL在使用不等于时无法使用索引会导致全表扫描。!=
5.is null 可以使用索引,但是is not null无法使用索引。
6.like以通配符开头会使索引失效导致全表扫描。
7.字符串不加单引号索引会失效。
8.使用or连接时索引失效

在我学习如上时,以为这个是铁规矩,直到今天才发现上面这几个索引失效的情况只是可能会失效。先说结论,经过本人测试以上几种情况只有在select *的时候才会出现;如果是正常的给字段不用 * 一般都会被MySQL优化器优化走索引
创建组合索引
我建立了三个索引
1.符合最左前缀
–不走组合索引
EXPLAIN
SELECT * FROM category
where type=1

2.不符合最左前缀
–走组合索引
EXPLAIN
SELECT status,type,name FROM category
where type=1

3.不符合最左前缀 不符合or失效
–走组合索引
EXPLAIN
SELECT status,type,name FROM category
where type=1 OR status=1

4.不符合最左前缀 不符合or失效
–走组合索引
EXPLAIN
SELECT status,type,name FROM category
where type=1 OR status=1
GROUP BY name ,status,type

相信你们也能自己动手发现如果用status,type,name ,符合了索引失效情况但还是走了索引,这是因为上面呢?
我们来看看MySQL的内部执行流程
图是网上找的
在这里插入图片描述
内部有一个优化器,优化器根据表的大小、索引情况、统计数据等信息,选择最佳的执行计划,以最小的代价返回结果集。这个过程有时候也被称为“查询重写”。
下面就可下结论了:select * 下面的条件不会被优化,而select 字段1,字段2 会被优化器优化。怪不得阿里规范叫我们不要使用select *

那么select 字段1,字段2 索引到底什么走索引,什么时候不走索引啊?
这个还真说不准,可能被优化器优化了就走索引了

那么有人可能会说那么那8条有什么用啊?直接select 字段1,字段2 优化交给优化器 就不用背了。
这里我认为它更像一种规范,符合规范做事会让系统内部少走弯路,也能提高性能

优化建议
and会自动调整顺序为最左前列
对于单值索引,尽量选择针对当前查询字段过滤性更好的索引
于组合索引,当前where查询中过滤性更好的字段在索引字段顺序中位置越靠前越好
对于组合索引,尽量选择能够包含在当前查询中where子句中更多字段的索引
尽可能通过分析统计信息和调整query的写法来达到选择合适索引的目的

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C# RestoreFormer 图像修复

效果 项目 代码 using Microsoft.ML.OnnxRuntime; using Microsoft.ML.OnnxRuntime.Tensors; using OpenCvSharp; using System; using System.Collections.Generic; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms;namespace 图像修复 {pu…

【SpringCloud-10】SCA-nacos

前言: 前面介绍的springcloud,可以看做第一代,称为:SCN(spring cloud Netflix); 接下来介绍的是第二代:SCA(spring cloud alibaba); SCA主要有以下组件&#…

Java|学习|异常

1.异常 1.1 异常 1.1.1 概述 异常:就是程序出现了不正常的情况。 Error:严重问题,不需要处理。 Exception:称为异常类,它表示程序本身可以处理的问题。 RuntimeException:在编译器不检查,出…

关于Skywalking Agent customize-enhance-trace对应用复杂参数类型取值

对于Skywalking Agent customize-enhance-trace 大家应该不陌生了,主要支持以非入侵的方式按用户自定义的Span跟踪对应的应用方法,并获取数据。 参考https://skywalking.apache.org/docs/skywalking-java/v9.0.0/en/setup/service-agent/java-agent/cust…

论文阅读:Rethinking Range View Representation for LiDAR Segmentation

来源ICCV2023 0、摘要 LiDAR分割对于自动驾驶感知至关重要。最近的趋势有利于基于点或体素的方法,因为它们通常产生比传统的距离视图表示更好的性能。在这项工作中,我们揭示了建立强大的距离视图模型的几个关键因素。我们观察到,“多对一”…

TCP/IP(九)TCP的连接管理(六)TIME_WAIT状态探究

一 TIME_WAIT探究 要明确TIME_WAIT状态在tcp四次挥手的阶段 ① 为什么 TIME_WAIT 等待的时间是 2MSL? 背景: 客户端在收到服务端第三次FIN挥手后,就会进入TIME_WAIT 状态,开启时长为2MSL的定时器1、MSL 是 Maximum Segment Lifetime 报文最大生存时间2、2MSL…

论文阅读之【Is GPT-4 a Good Data Analyst?(GPT-4是否是一位好的数据分析师)】

文章目录 论文阅读之【Is GPT-4 a Good Data Analyst?(GPT-4是否是一位好的数据分析师)】背景:数据分析师工作范围基于GPT-4的端到端数据分析框架将GPT-4作为数据分析师的框架的流程图 实验分析评估指标表1:GPT-4性能表现表2&…

跨境商城源码有哪些独特的功能和优势

1. 强大的跨境支付功能 跨境商城源码具备强大的跨境支付功能,支持多种支付方式,包括信用卡、支付宝、微信支付等。该功能遵循国际支付标准,能够确保支付过程的安全性和可靠性,为用户提供便捷的跨境购物体验。 2. 多语言和多货币支…

[GAMES101]透视投影变换矩阵中为什么需要改变z值

一、问题提出 在GAMES101-Lecture4 Transformation Matrices 一节中,闫老师介绍了正交投影和透视投影。 在讲透视投影变换矩阵 M p e r s p → o r t h o M_{persp→ortho} Mpersp→ortho​时,同学们对矩阵中的z分量是变化的还是不变的有很多争论。即下…

MySQL多表查询综合练习

1.创建student和score表 CREATE TABLE student ( id INT(10) NOT NULL UNIQUE PRIMARY KEY , name VARCHAR(20) NOT NULL , sex VARCHAR(4) , birth YEAR, department VARCHAR(20) , address VARCHAR(50) ); 创建score表。SQL代码如下: CREATE TABLE sc…

Postgresql关于EOH的使用注意

注意通常拿到的指针不是EOH头 EOH是一种扩展数据结构,之前有几篇博客讨论过了,最近在改相关代码加深了一些理解。 EOH目前支持ER_methods、EA_methods两套实现,分别是record类型展开和数组类型展开。 在内存中的样子大概是(EA为…

Java基础20问(1-5)

1.Java面向对象和面试过程的区别? 面向过程是将一个问题拆解成几个步骤,依次实现每一个步骤,比如实现一个冒泡排序的算法,是为了解决某个非常具体的问题。 而面向对象也是将一个问题拆解成几个步骤,但是先不去实现&a…

scratch身高统计 2023年9月中国电子学会图形化编程 少儿编程 scratch编程等级考试三级真题和答案解析

目录 scratch身高统计 一、题目要求 1、准备工作 2、功能实现 二、案例分析

二维码智慧门牌管理系统:构建未来社区管理新典范

文章目录 前言一、系统概述二、系统优势三、多领域应用四、未来展望 前言 在科技的迅猛发展下,我们的生活正朝着智能化迈进。最近,备受瞩目的“二维码智慧门牌管理系统”为社区管理带来了一场革命,通过建立标准要素之间的关系,重…

207、SpringBoot 整合 RabbitMQ 实现消息的发送 与 接收(监听器)

目录 ★ 发送消息★ 创建队列的两种方式代码演示需求1:发送消息1、ContentUtil 先定义常量2、RabbitMQConfig 创建队列的两种方式之一:配置式:问题: 3、MessageService 编写逻辑PublishController 控制器application.properties 配…

同为科技(TOWE)关于风力发电雷电防护的解决方案

风能作为一种可再生清洁能源,是国家新能源发展战略的重要组成部分。我国风能开发潜力高达2.510GW以上,近年来风力发电机组逐年增加,截止到2022年,全国风电装机容量约3.5亿千瓦,同比增长16.6%。然而,由于风力…

FPGA project : flash_continue_write

本实验学习了通过spi通信协议,驱动flash;完成连续写操作。 连续写: 本质上还是页编程指令,两种连续写的方式: 1,每次只写1byte的数据。 2,每次写满1页数据,计算剩余数据够不够写…

RabbitMQ的5种模式——再探RabbitMQ的模式,简单、工作,发布订阅(广播),路由、主题 页面分析

前言 RabbitMQ作为一款常用的消息中间件,在微服务项目中得到大量应用,其本身是微服务中的重点和难点,有不少概念我自己的也是一知半解,本系列博客尝试结合实际应用场景阐述RabbitMQ的应用,分析其为什么使用&#xff0…

手机市场或迎复苏,芯片测试与封测供应链积极应对 | 百能云芯

低迷不振的手机供应链,终于迎来曙光?半导体封测供应链传出从10月开始,手机系统大厂终于开始有明显的库存回补动作,锁定如联发科等一线手机SoC从业者的「旧款芯片」备货。 测试厂如京元电、测试界面的雍智等接获备战指示&#xff0…

深圳寄包裹到德国

深圳,作为全球最发达的城市之一,以其高效的物流服务在全球范围内享有盛名。如果你正在寻找一种方式将包裹从深圳寄送到德国,那么本文将为你提供详细的步骤和建议。 第一步:了解国际邮寄的基本信息 首先,你需要了解包裹…