MySQL进阶-索引的组合索引

练习题目

题目链接难度
SQL进阶-索引的组合索引★★★☆☆

SQL思路

SQL进阶-索引的组合索引

在这里插入图片描述
在这里插入图片描述

初始化数据
drop table if exists user_profile;
CREATE TABLE `user_profile` (
`id` int NOT NULL,
`device_id` int NOT NULL,
`gender` varchar(14) NOT NULL,
`age` int ,
`university` varchar(32) NOT NULL,
`province` varchar(32)  NOT NULL);
INSERT INTO user_profile VALUES(1,2138,'male',21,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(2,3214,'male',null,'复旦大学','Shanghai');
INSERT INTO user_profile VALUES(3,6543,'female',20,'北京大学','BeiJing');
INSERT INTO user_profile VALUES(4,2315,'female',23,'浙江大学','ZheJiang');
INSERT INTO user_profile VALUES(5,5432,'male',25,'山东大学','Shandong');
解法

要求处理:

  • 选出正确答案

分析:

什么是组合索引

组合索引是创建索引时,包含表的多个字段(至少2个字段),且字段会有先后顺序,mysql支持索引的最左原则。
还记得前面虚竹哥传授的索引失效口诀吗?再啰嗦一遍:模型数或运最快
其中的 代表当查询条件有组合索引时,如果不符合索引的最左原则,索引会失效。

为什么要使用组合索引
  • 减少开销:创建一个组合索引(a,b,c) ,相当于创建了(a),(a,b),(a,c),(a,b,c) 四个索引。每多一个索引,都会增加写操作的开销和磁盘空间的开销。对于大量数据的表,使用组合索引会大大的减少开销!

  • 覆盖索引:创建一个组合索引(a,b,c) ,相当于创建了(a),(a,b),(a,c),(a,b,c) 四个索引。对索引列的覆盖面就扩大了,可直接通过组合索引命中数据,减少io操作。

  • 效率高:索引列越多,通过索引筛选出的数据越少。有1000W条数据的表,有如下sql:select from table where col1=1 and col2=2 and col3=3,假设假设每个条件可以筛选出10%的数据,如果只有单值索引,那么通过该索引能筛选出1000W10%=100w条数据,然后再回表从100w条数据中找到符合col2=2 and col3= 3的数据,然后再排序,再分页;如果是联合索引,通过索引筛选出1000w10% 10% *10%=1w,效率提升可想而知!

如何使用组合索引

创建组合索引:

  • 使用CREATE INDEX 创建组合索引:

CREATE INDEX idx_university_province_age ON user_profile(university,province,age);

  • 使用 ALTER TABLE 创建普通索引:

ALTER TABLE user_profile ADD INDEX idx_university_province_age(university,province,age);

mysql创建组合索引时,会遵循索引的最左原则。最左优先:组合索引的第一个字段一定要出现在查询条件中,这个组合索引才会生效。
示例:

explain select *
from user_profile
where university='北京大学'
and age = 20
and province='BeiJing'

在这里插入图片描述
不生效示例:

explain select *
from user_profile
where age = 20
and province='BeiJing'

在这里插入图片描述
创建一个组合索引(a,b,c) ,相当于创建了(a),(a,b),(a,c),(a,b,c) 四个索引,实战验证
示例:
创建一个组合索引(a,b,c) ,相当于创建了(a)索引

explain select *
from user_profile
where university='北京大学'

在这里插入图片描述

创建一个组合索引(a,b,c) ,相当于创建了(a,b)索引

explain select *
from user_profile
where university='北京大学'
and province='BeiJing'

在这里插入图片描述

创建一个组合索引(a,b,c) ,相当于创建了(a,c)索引

explain select *
from user_profile
where university='北京大学'
and age = 20

在这里插入图片描述

创建一个组合索引(a,b,c) ,相当于创建了(a,b,c)索引,组合索引的字段在查询条件里顺序是任意的。

explain select *
from user_profile
where age = 20
and  university='北京大学'
and province='BeiJing'

在这里插入图片描述

答案

嗯,这题的答案选。。评论区大声告诉小二。

参考:

组合索引的最左优先原则

我是小二,我们明天见~

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

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

相关文章

【iStat Menus for MacBook状态栏菜单系统监控工具--安装教程【简单操作,随时了解电脑情况】

Mac分享吧 文章目录 iStat Menus for MacBook状态栏菜单系统监控软件 效果图展示一、iStat Menus 状态栏菜单系统监控软件 Mac电脑版——v6.73(1240)1️⃣:下载软件2️⃣:安装软件3️⃣:软件自定义配置 安装完成!!&am…

netmap.js:基于浏览器的网络发现工具

netmap.js是一款基于浏览器,用于提供主机发现和端口扫描功能的网络发现工具。 netmap.js的执行速度也非常的快,由于其使用了es6-promise-pool,因此它可以有效地运行浏览器允许的最大并发连接数。 动机 由于我正需要一个基于浏览器的端口扫…

计算机网络 (2)计算机网络的类别

计算机网络的类别繁多,根据不同的分类原则,可以得到各种不同类型的计算机网络。 一、按覆盖范围分类 局域网(LAN): 定义:局域网是一种在小区域内使用的,由多台计算机组成的网络。覆盖范围&#…

modbus协议 Mthings模拟器使用

进制转换 HEX 16进制 (0、1、2、3、4、5、6、7、8、9、A、B、C、D、E、F表示0-15) dec 10进制 n(16进制) -> 10 abcd.efg(n) d*n^0 c*n^1 b*n^2 a*n^3 e*n^-1 f*n^-2 g*n^-3(10) 10 -> n(16进制) Modbus基础概念 高位为NUM_H&…

飞腾平台Arm NN软件栈安装使用指南

【写在前面】 飞腾开发者平台是基于飞腾自身强大的技术基础和开放能力,聚合行业内优秀资源而打造的。该平台覆盖了操作系统、算法、数据库、安全、平台工具、虚拟化、存储、网络、固件等多个前沿技术领域,包含了应用使能套件、软件仓库、软件支持、软件适…

基于JavaSpringboot个人博客

一、作品包含 源码数据库设计文档万字全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA 数据库&#xf…

鸿蒙next ui安全区域适配(刘海屏、摄像头挖空等)

目录 相关api 团结引擎对于鸿蒙的适配已经做了安全区域的适配,也考虑到了刘海屏和摄像机挖孔的情况,在团结引擎内可以直接使用Screen.safeArea 相关api

【GPTs】Gif-PT:DALL·E制作创意动图与精灵动画

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | GPTs应用实例 文章目录 💯GPTs指令💯前言💯Gif-PT主要功能适用场景优点缺点 💯小结 💯GPTs指令 中文翻译: 使用Dalle生成用户请求的精灵图动画&#…

JMeter初体验:从入门到入门的性能测试之旅

一、关于性能测试 1、性能测试概述 性能测试是一种非功能测试,旨在评估系统在不同负载条件下的性能表现。它包括负载测试、压力测试、稳定性测试和基准测试等。性能测试的目的是确保系统在预期的负载下能够正常运行,并满足用户对响应时间、吞吐量和其他…

MongoDB新版本安装配置教程(7.0.15版本-zip下载)

找了半天MongoDB新版本怎么解决没有mongo命令,都没有很好的解决方法 现在分享一下: 首先下载: 然后手动创建 data 和 log 两个文件夹 然后再系统变量配置环境变量 在data的目录下,创建一个db文件 然后:在bin目录下cmd执行: mongod --dbpath D:\MongoDB\data\db …

解决虚拟机未被自动分配ip

文章目录 1. 背景2. 解决步骤 1. 背景 从vulnhub下载的靶场文件,网络适配器模式设置为nat模式之后,启动虚拟机之后发现没有成功分配动态ip。推测是虚拟机分配的网卡名称和原先靶机作者设置网络配置文件 网络接口名称不一致导致。 2. 解决步骤 解决办法就…

路径规划——RRT-Connect算法

路径规划——RRT-Connect算法 算法原理 RRT-Connect算法是在RRT算法的基础上进行的扩展,引入了双树生长,分别以起点和目标点为树的根节点同时扩展随机树从而实现对状态空间的快速搜索。在此算法中以两棵随机树建立连接为路径规划成功的条件。并且&…

2024游戏陪玩app源码的功能介绍/线上陪玩交友上线即可运营软件平台源码搭建流程

一个完整的陪玩交友系统从概念到实现再到维护的全过程得以清晰展现。每一步都需要团队的紧密协作与细致规划,以确保系统既满足用户需求,又具备良好的稳定性和可扩展性。 基础框架 移动端开发框架:如uniapp,它支持多平台开发&…

缓冲式线程池C++简易实现

前言 : 代码也比较短&#xff0c;简单说一下代码结构&#xff0c;是这样的&#xff1a; SyncQueue.hpp封装了一个大小为MaxTaskCount的同步队列&#xff0c;这是一个模板类&#xff0c;它在线程池中承担了存放任务等待线程组中的线程来执行的角色。最底层是std::list<T>…

Unity资源打包Addressable AA包

从零到一 很多资料都是通过一步步设置讲解的&#xff0c;有时很想先快速实现&#xff0c;再了解细节。 下面就是远程加载Cube.prefab然后实例化简单的代码。 代码中可以不需要远程的网址&#xff0c;不需要资源下载的位置&#xff0c;不需要判断是否已经下载到本地。 那是如…

MySQL之索引(2)(B树、B+树、索引分类、聚集索引、二级索引、回表查询)

目录 一、B树结构索引&#xff08;B-树&#xff09; &#xff08;1&#xff09;特点。 &#xff08;2&#xff09;问题&#xff1a;范围查询效率&#xff1f;&#xff1f; &#xff08;3&#xff09;缺点。 1、查询的不稳定性。 2、各叶子节点无联系。 3、IO资源的消耗较多。 二…

翼鸥教育:从OceanBase V3.1.4 到 V4.2.1,8套核心集群升级实践

引言&#xff1a;自2021年起&#xff0c;翼鸥教育便开始应用OceanBase社区版&#xff0c;两年间&#xff0c;先后部署了总计12套生产集群&#xff0c;其中核心集群占比超过四分之三&#xff0c;所承载的数据量已突破30TB。自2022年10月&#xff0c;OceanBase 社区发布了4.2.x 版…

ubuntu使用DeepSpeech进行语音识别(包含交叉编译)

文章目录 前言一、DeepSpeech编译二、DeepSpeech使用示例三、核心代码分析1.创建模型核心代码2.识别过程核心代码 四、交叉编译1.交叉编译2.使用 总结 前言 由于工作需要语音识别的功能&#xff0c;环境是在linux arm版上&#xff0c;所以想先在ubuntu上跑起来看一看&#xff…

Go语言入门教案

文章目录 一、教学目标二、教学重难点&#xff08;一&#xff09;重点&#xff08;二&#xff09;难点 三、教学方法四、教学过程&#xff08;一&#xff09;Go语言简介&#xff08;二&#xff09;环境搭建1. 下载和安装Go语言开发环境2. 配置Go语言环境变量3. 命令行查看Go语言…

普通人如何做好AI数字人直播带货月入10W?

在科技飞速发展的今天&#xff0c;AI数字人直播正以惊人的速度崛起&#xff0c;为直播领域带来了一场前所未有的变革。那到底AI数字人直播前景怎么样&#xff0c;是怎样一个形式&#xff0c;普通人能够利用Ai数字人直播赚取到收益吗&#xff1f; 首先讲到AI数字人直播很多人想的…