MySQL联合索引、索引下推Demo

news2024/10/9 18:13:28

 1.联合索引

测试SQL语句如下:表test中共有4个字段(id, a, b, c),id为主键

drop table test;

#建表
create table test(
	id bigint primary key auto_increment,
	a int,
	b int,
	c int
)

#表中插入数据
insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,6);
insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,6);
insert into test(a, b, c) values(1,2,3),(2,3,4),(4,5,6);

# 建立联合索引(a,b,c)
create index index_abc ON test (a, b, c);

# 删除索引
drop index index_abc on test;

# 查询a = 1 and c = 3,观察这条语句是否走了索引
explain 
select a,b,c from test where a = 1 and c = 3; # 存在回表的可能

explain 
select a,b,c from test where a = 1; # 完全使用索引

首先不建立联合索引(a,b,c),执行下面的执行

explain 
select a from test where a = 1 and c = 3; # 存在回表的可能

结果下如下: 使用主键的覆盖索引查询,没有走索引

建立联合索引(a,b,c)后,同样执行上面语句,结果如下:

通过explain,我们发现,这条语句可以走索引,同时还存在Using where,说明存在回表的可能,但是这条语句是可以走索引的。(部分索引)

如果我们执行下面这条语句:(符合最左前缀原则

explain 
select a,b,c from test where a = 1; # 完全使用索引

 结果如下:说明完全使用索引来查询。

 2.索引下推ICP

ICP可以减少存储引擎必须访问基本表的次数以及服务器必须访问存储引擎的次数,这是是否使用ICP的最可靠的判断条件

SQL语句如下:

create table test01(
	`id` bigint primary key auto_increment,
	`name` varchar(64),
	`age` int,
	`desc` varchar(64)
)

# 插入测试数据
insert into test01(name, age) values('张三1', 18);
insert into test01(name, age) values('张三2', 21);
insert into test01(name, age) values('张三3', 22);
insert into test01(name, age) values('李四', 18);
insert into test01(name, age) values('王五', 13);

# 为name和age建立联合索引
create index index_na on test01(name, age);

# 观察name like '张%' and age = 18
explain
select * from test01 where `name` like '张%' and `age` = 18;

explain
select name, age from test01 where `name` like '张%' and `age` = 18;

首先给name和age建立联合索引

然后执行下面这条语句

explain
select * from test01 where `name` like '张%' and `age` = 18;

结果如下:

Using index condition说明使用了索引下推,并且存在回表的现象,因为select *

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

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

相关文章

数据分析Power BI设置万为单位的数据

玩过Power BI的同学都知道,power BI在度量值设置单位里,唯独没有万这个单位,但是我们可以自定义,操作过程如下: 1.用DAX新建单位表 单位 SELECTCOLUMNS( { ( "元", 1), ("万",10000), ("千…

清华大学经管学院朱武祥教授:五步构建高效的数据飞轮,提升企业核心竞争力

面对AI时代的到来,企业应积极拥抱这一变革,构建和优化自身的数据飞轮,让飞轮高速转动起来,为企业的创新发展持续赋能。 近期,清华管理评论发表了一篇名为《AI时代如何构建数据飞轮》的文章,引起了我们的重点…

Java 根据字符生成背景透明的图片

上代码 package com.example.demotest.controller;/*** Author shaolin* Date 2024-10-08 10:11**/import javax.imageio.ImageIO; import java.awt.*; import java.awt.image.BufferedImage; import java.awt.image.ColorModel; import java.awt.image.WritableRaster; impor…

手机 电脑 Pad 是如何得到IP地址的呢? 如何让你的设备自动获取IP地址?DHCP :给你 IP 地址的隐形人

我们每天都是用手机 电脑 Pad 一系列电子设备连接到网络中,然后网络中的每一个设备都有一个独一无二的IP地址,用来作为网络中的唯一标识,那这些设备上的IP地址是如何得到的呢? 在现代网络中,每一台设备都需要一个唯一的…

Kubernetes----基础命令合集

目录 一、命令概述 1.1命令分类 1.2 基本语法 二、查看基本信息 2.1 环境指令 2.1.1 查看版本信息 2.1.2 查看资源对象简写 2.1.3 添加补全信息 2.1.4 查看日志 2.1.5 查看集群信息 2.2 查看资源信息 2.2.1 获取资源相关信息 ① 查看集群组件状态 ② 查看命名空间…

7个维度点剖析地图投影 第6个最重要

摘要: 地图投影在制图学和地理信息系统 (GIS) 中发挥着至关重要的作用。然而,即使是地理空间行业中经验最丰富的专业人士,它们也常常令人们感到困惑。在大多数情况下,也许必须返回参考文档和材料来重新检查这些问题。 因此有许多令人费解的现象,例如您是否曾经看过世界地..…

nginx代理,nginx301跳转,nginx地址重写

ngin代理 假如你的地址是:http://192.168.1.2:8282 你的域名是:www.jjycheng.com 你想访问域名www.jjycheng.com时,实际请求的地址是http://192.168.1.2:8282,但浏览器上的地址不变。 此时,你用到的技术就是请求代理 代理.conf配置 http {server {listen 80; server_na…

【Parsec】一款安全高效的远程桌面软件

Parsec 是一款远程桌面软件,它允许用户通过P2P(点对点)技术远程访问和控制另一台计算机。以下是Parsec的一些主要作用、安全私密性特点以及优缺点: 作用: 远程游戏:用户可以远程访问高性能PC进行游戏&am…

Centos7.5 安装和配置jdk17

目录 一、下载JDK17包 二、将安装包放入服务器 三、解压jdk包到/usr/lib/jvm 四、修改JDK环境配置 1、打开配置文件 2、最后一行插入 3、立即生效 4、检查版本 一、下载JDK17包 访问网址:Java Downloads | Oraclehttps://www.oracle.com/java/technologies/downloads…

新硬盘第一次使用需要怎样做?

无论是组装新电脑,还是给现有电脑增加存储空间,我们需要进行一些安装硬盘和设置硬盘的操作。对于没有相关经验的用户来说,对于拿到手的新硬盘会感到手足无措,不知道应该从哪里开始。今天小编详细介绍一下新硬盘第一次使用时的流程…

中国内地高校2023年度捐赠收入排名更新 | 浙大领跑,宁波东方理工成最大黑马!

社会捐赠是世界一流大学办学经费的重要来源之一,也是评价世界一流大学的核心指标之一。 9月21日,支持湘潭大学建设捐赠与合作签约仪式暨“校友回湘”推进会议举行。株洲华锐精密工具股份有限公司向学校捐赠湘潭大学“华锐精密”研究院以及现金人民币&am…

基于springboot+vue的协同过滤电影推荐系统

一、系统架构 前端:vue2 | element-ui | html 后端:springboot | mybatis 环境:jdk1.8 | mysql | maven | node 二、代码及数据库 三、功能介绍 01. web端-首页1 02. web端-首页2 03. web端-注册 04. web端-登录 05…

GC9008为什么能替代MX6208应用于红外开关,电流开关上

GC9008作为一种新型集成电路,具备了多个方面的优势,使其能够有效替代MX6208。以下是GC9008替代MX6208的主要原因及其优势: 1. 更低的功耗 优势:GC9008在设计上进行了优化,能够在更低的电压下运行,从而显著…

以 AI 强化学习优化双边交易与借贷投资组合

作者:老余捞鱼 原创不易,转载请标明出处及原作者。 写在前面的话: 本研究提出基于强化学习的高风险环境投资组合管理模型,采用新环境公式和基于利润损失的奖励函数,用 Soft Actor-Critic 代理和卷积神经网络实现,管理 12 种加密资产投资组合并在 Binance 永续期货…

CTFshow 命令执行 web37-web40

目录 web37 方法一:php://input 方法二:data协议 web38 web39 web40 方法一:构造文件读取 方法二:构造数组rce web37 error_reporting(0); if(isset($_GET[c])){$c $_GET[c];if(!preg_match("/flag/i", $c)){incl…

Gin框架中实现路由分组

在Gin框架中实现路由分组非常简单,你可以使用Group方法来创建一个分组,然后在这个分组中定义相关的路由。 分组可以包含中间件、路由前缀等,这使得路由的组织和管理变得非常方便,尤其是在大型项目中。 使用Gin框架实现路由分组的…

鹧鸪云光伏软件全面解析

一、主要功能 光伏电站常用工具: 投融资估算:帮助用户进行光伏电站项目的投资预算和融资规划。 发电量计算:根据光伏电站的设计参数和当地气候条件,计算电站的发电量。 安装倾角测算:根据屋顶朝向和地理位置&#…

欢迎加入凌鸥学园

🎓免费学习,荣誉加冕 凌鸥学园提供免费的电机控制课程,从基础到专业,全程无负担。 📚全面课程体系,灵活学习模式 凌鸥学园提供从基础到专业的全面课程体系,每个等级的课程都经过精心设计&#…

QT 串口通信中确保数据接收完成的方法

目录 一、引言 二、Qt 串口通信基础 1.QSerialPort 类 2.信号与槽机制 三、确保接收完成的方法 1.基于数据长度判断 2.基于特定结束标志判断 3.基于定时器的超时判断(适用于不确定长度情况) 4.结合协议头中的长度信息(对于自定义协…

银河麒麟操作系统设置指定用户访问共享文件夹

银河麒麟操作系统设置指定用户访问共享文件夹 一、服务端操作步骤1:修改配置文件步骤2:设置用户密码步骤3:重启服务 二、操作方法验证 💐The Begin💐点点关注,收藏不迷路💐 在银河麒麟操作系统中…