为什么SQL执行计划未使用创建的索引呢?MySQL是如何选择索引的?

在实际工作中,大家可能会遇到这个问题:MySQL并没有按照自己的预想来选择索引,比如创建了索引但是选择了全表扫描,这肯定是 MySQL 数据库的 Bug,或者是索引出错了。真相真的是MySQL出错了吗?当然不是。主要是因为索引中的数据出了错

为什么这么说呢?要理解这个问题,要理解 MySQL 数据库中的优化器是怎么执行的,然后才能明白为什么最终优化器没有选择我们预想的索引。

一、MySQL是如何选择索引的?

以下面的表结构为例:

 CREATE TABLE `orders` (

  `O_ORDERKEY` int NOT NULL,

  `O_CUSTKEY` int NOT NULL,

  `O_ORDERSTATUS` char(1NOT NULL,

  `O_TOTALPRICE` decimal(15,2NOT NULL,

  `O_ORDERDATE` date NOT NULL,

  `O_ORDERPRIORITY` char(15NOT NULL,

  `O_CLERK` char(15NOT NULL,

  `O_SHIPPRIORITY` int NOT NULL,

  `O_COMMENT` varchar(79NOT NULL,

  PRIMARY KEY (`O_ORDERKEY`),

  KEY `idx_custkey_orderdate` (`O_CUSTKEY`,`O_ORDERDATE`),

  KEY `ORDERS_FK1` (`O_CUSTKEY`),

  KEY `idx_custkey_orderdate_totalprice` (`O_CUSTKEY`,`O_ORDERDATE`,`O_TOTALPRICE`),

  CONSTRAINT `orders_ibfk_1` FOREIGN KEY (`O_CUSTKEY`REFERENCES `customer` (`C_CUSTKEY`)

ENGINE=InnoDB

在查询字段 o_custkey 时,理论上可以使用三个相关的索引:ORDERS_FK1、idx_custkey_orderdate、idx_custkey_orderdate_totalprice。那 MySQL 优化器是怎么从这三个索引中进行选择

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

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

相关文章

python技巧梳理

背景 在开发中,经常会遇到,同时存在多个值,依次判断上述值,选择第一个非空、True的值作为整个表达式的值进行返回,这个时候会用到or这个关键词,下面讲一下用法。 方法 value1 None value2 0 value3 H…

斯洛文尼亚普利雅玛城堡:吉尼斯世界纪录认证的世界最大溶洞城堡

除了著名的波斯托伊纳溶洞(Postojna Cave),普利雅玛城堡(Predjama Castle)也是波斯托伊纳洞穴公园(Postojna Cave Park)不容错过的景点之一。这座城堡坐落在斯洛文尼亚(Slovenia&…

什么是数字化转型?企业数字化转型的核心重点有哪些?

一、什么才是真正的数字化转型? 虽然很多企业管理者已经就企业数字化逐步达成了较为广泛的共识,但根据业界的调查结论,不少企业管理者仍然缺乏紧迫感和行动力,反应迟缓。 导致这些情况的本质原因:主要还是因为企业管…

【编译原理】LR(0)分析

一、实验目的 LR(0)分析法是一种移进归约过程,能根据当前分析栈中的符号串,同时也不用向右查看输入串的符号就可唯一确定分析器的动作。通过对给定的文法构造LR(0)分析表和实现某个符号串的分析掌握LR(0)分析法的基本思想。 二、实验要求 实现LR(0)分…

用(华为)三层交换技术解决不同vlan间通信问题

用三层交换技术解决不同vlan间通信问题 一、网络拓扑: 二、配置思路:自下而上配置 1.PC端配置基本IP信息包括网关 2.接入交换机S1上划分三个vlan,分别是VLAN 10 VLAN 20 VLAN 30 并且将对应的接口加入指定的vlan 3.给接入交换机配置trunk链路…

IT技术 | 电脑蓝屏修复记录DRIVER_IRQL_NOT_LESS_OR_EQUAL

我的台式机是iMac 2015年的,硬盘是机械的,时间久了运行越来越慢。后来对苹果系统失去了兴趣,想换回windows,且想换固态硬盘,就使用winToGo 搞了双系统,在USB外接移动固态硬盘上安装了win10系统。 最近&…

SpringBoot 配置全局异常统一处理

【1】创建全局异常的类 BusinessException Slf4j public class BusinessException extends RuntimeException {/*** 错误码*/private int code;public int getCode() {return code;}/*** param message*/public BusinessException(String message) {super(message);this.code …

C++ 虚函数和纯虚函数

虚函数 #include <iostream> using namespace std; class Vehicle //交通工具 { public:void run() const{cout << "run a vehicle. " << endl;} }; class Car : public Vehicle //汽车 { public:void run() const{cout << "run a c…

Android studio版本和Android gradle plugin版本对应表

1.Android studio 版本的升级&#xff0c;一个方面上看主要是升级对AGP最高版本的支持 2.那为什么AGP要出高版本呢&#xff0c;主要支持高版本的API&#xff0c;真是一环扣一环

将YOLO格式数据集转换为YOLO-Mamba等特定工具指定的数据集格式

目录 克隆Github YOLO-Mamba源码YOLO-Mamba数据集格式下载的公开数据集目录边界框坐标文件类别标签文件 数据集格式转换代码转换格式的效果展示 今天为大家解析YOLO-Mamba这篇论文开源的代码&#xff0c;首先讲解YOLO格式数据集转换为YOLO-Mamba等特定工具指定的数据集格式的操…

C++聚合类型初始化

如果你的代码中没有定义构造函数&#xff0c;而你依然能够成功编译和运行 String a("Hello");&#xff0c;那么你可能使用的是一个支持聚合初始化的编译器版本。这种情况下&#xff0c;C 标准允许聚合类型使用这种形式的初始化&#xff0c;但这仅在特定条件下有效。 …

GoogLeNet论文解读—Going deeper with convolutions2015(V1)

GoogLeNet论文解读—Going deeper with convolutions2015 说明&#xff1a;本文只解读GooleNet的14年参赛的v1版本&#xff0c;之后的改进版本可能在日后的学习中继续更新 研究背景 更深的卷积神经网络 认识数据集&#xff1a;ImageNet的大规模图像识别挑战赛 LSVRC-2014&…

Java面试八股之Thread类中的yeild方法有什么作用

Thread类中的yeild方法有什么作用 谦让机制&#xff1a;Thread.yield()方法主要用于实现线程间的礼让或谦让机制。当某个线程执行到yield()方法时&#xff0c;它会主动放弃当前已获得的CPU执行权&#xff0c;从运行状态&#xff08;Running&#xff09;转变为可运行状态&#…

快速失败“fail-fast”和安全失败“fail-safe”

目录 快速失败——fail-fast 异常原因 正常原因 安全失败“fail-safe” 快速失败——fail-fast java的快速失败机制是java集合框架中的一种错误检测机制&#xff0c;当多个线程对集合中的内容进行修改时可能就会抛出ConcurrentModificationException异常。不仅仅在多线程状态…

网络安全等级保护2.0(等保)是什么

等保的全称是信息安全等级保护&#xff0c;是《网络安全法》规定的必须强制执行的&#xff0c;保障公民、社会、国家利益的重要工作。 通俗来讲就是&#xff1a;公司或者单位因为要用互联网&#xff0c;但是网上有坏人&#xff0c;我们不仅要防御外部坏人&#xff0c;还要看看…

2016届蓝桥杯大赛软件类国赛Java大学B组 愤怒小鸟 数学模拟

注意开浮点数 ​​​​ import java.util.Scanner;public class Main {static Scanner scnew Scanner(System.in);public static void main(String[] args) {double t0;int cnt0;double distance1000;while(distance>1){//相撞时间tdistance/60.0;distance-t*20;cnt;}Syste…

一个程序员的牢狱生涯(39)购物

星期一 购 物 头铺对我和大镣说完话后,就让我俩回了号子,然后头铺也走回来坐在通铺边。 “叮铃铃……”的铃声在上午10点的时候准时响起。原本刺耳的铃声如今的我已经习惯,感觉并不是那么让人心惊,号子里的所有人都知道,上午的坐班已经结束。因为今天是星期一,到了小卖铺…

Android 测量App启动时间

Android 测量App启动时间 adb shell am start -W com.example.test/.TestActivityStarting: Intent { actandroid.intent.action.MAIN cat[android.intent.category.LAUNCHER] cmpcom.example.test/.TestActivity } Warning: Activity not started, intent has been delivered…

python中的Matplotlib 中文和正负号乱码问题

在 Matplotlib 中遇到中文和正负号符号显示有问题&#xff0c;这通常是由于Matplotlib 默认字体可能不支持中文&#xff0c;可以通过修改 rcParams 中的 font.sans-serif 或 font.family 参数来指定一个支持中文的字体。例如&#xff0c;可以使用 SimHei、FangSong、Noto Sans …