mysql进阶-索引进阶

目录

1. 索引的相关语法

1.1 创建索引:

1.2 删除索引:

1.3 其他修改或创建方法:

2. 索引创建分类

2.1 索引类型

2.2 索引方法

2.3 索引分类

3. 索引原则

3.1 覆盖索引

3.2 最左前缀原则

3.3 索引下推(index condition pushdown)


1. 索引的相关语法

假如我们存在订单表,表结构如下:

CREATE TABLE `t_order` (`order_id` int(12) NOT NULL AUTO_INCREMENT COMMENT '订单主键',`money` decimal(10,2) DEFAULT NULL COMMENT '金额',`good_id` int(12) DEFAULT NULL COMMENT '商品ID',`good_name` varchar(20) DEFAULT NULL COMMENT '商品名称',PRIMARY KEY (`order_id`)
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4;

1.1 创建索引:

CREATE INDEX 索引名 ON <表名> (字段1,字段2,...);

示例:给商品id添加索引

create index index_good_id on t_order (good_id);

1.2 删除索引:

DROP INDEX 索引名 ON <表名>;

示例:删除商品id字段

drop index index_good_id on t_order;

1.3 其他修改或创建方法:

-- 创建表时创建索引
CREATE TABLE 表名
(
字段 数据类型,
….
{ INDEX | KEY } 索引名(字段1,字段2,...)
)
​
-- 修改表时修改索引
ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段1,字段2,...);
​
-- 删除主键索引
ALTER TABLE 表名 DROP PRIMARY KEY;

本人推荐使用最直接的创建索引和删除索引的语法,不建议和表的操作结合。

2. 索引创建分类

2.1 索引类型

索引类型分为:Normal 普通索引、Unique 唯一索引、Full Text 全文索引、SPATIAL 空间索引。

普通的开发一般只会用到普通索引和唯一索引。普通索引就是:可以重复。唯一索引就是不可以重复。这两个索引的含义也比较好理解。

我们使用上边的语法创建的索引默认是:普通索引。

2.2 索引方法

索引方法分为:BTREE、HASH两种方式。

BTREE索引的优点上篇文章已总结。

HASH索引的检索效率非常高,但是对于范围查询性能非常低。

我们使用上边的语法创建的索引默认是:BTREE。

2.3 索引分类

根据创建索引时的字段的多少可以分为单字段索引和组合索引。单字段索引就是创建索引时只包含一个字段,例如上边的示例。多字段索引就是创建索引时包含多个字段,如下:

create index index_good_id on t_order (good_id,good_name);

当然还有其他分类,例如聚簇索引和非聚簇索引。

3. 索引原则

3.1 覆盖索引

假如我们在t_order表中创建了good_id字段的索引,

create index index_good_id on t_order (good_id);

此时有如下查询语句:

select order_id from t_order where good_id

此语句查询时会用到用到good_id索引,并且order_id作为主键也在索引上,因此可以直接提供查询结果,不需要回表(回表的概念可以查看上篇文章:mysql进阶-索引基础-CSDN博客)。在这个查询里,索引index_good_id已经“覆盖”了我们的查询需求,我们称为覆盖左右。

常见的场景:当我们需要根据身份证查询姓名时,那么我们可以在居民表中建立身份证和姓名的联合索引。

3.2 最左前缀原则

该原则只使用于组合索引。组合索引的多个字段是有序的,遵循左对齐的原则。

假设在订单表中,我们查询商品名称首个字是香的商品的订单ID:

select order_id from t_order where good_name like '香%'

如果我们在表中有如下索引:

create index index_good_name on t_order (good_name);

那么我们也可以用到索引。

由上可知:不只是索引的全部定义,只要满足最左前缀,就可以利用索引来加速检索。这个最左前缀可以是联合索引的最左 N 个字段,也可以是字符串索引的最左 M 个字符。

3.3 索引下推(index condition pushdown)

索引下推是5.6版本之后引入的。

假如我们在表中有如下索引:

create index index_good_money on t_order (good_name,money);

如果我们有如下查询:

select * from t_order where good_name = '香蕉' and money > 10.0

此时数据库会使用索引下推,索引下推就是在索引遍历过程中,对索引中包含的字段先做判断,直接过滤掉不满足条件的记录,减少回表次数。

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

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

相关文章

C++发展史

目录 什么是C C的发展史 C的重要性 C在实际工作中的应用 “21天教你学会C” 什么是C 先看看祖师爷&#xff0c;记得多拜拜&#x1f92d; C语言是结构化和模块化的语言&#xff0c;适合处理较小规模的程序。对于复杂的问题&#xff0c;规模较大的 程序&#xff0c;需要高度…

逻辑卷管理、逻辑卷扩展、文件系统刷新、逻辑卷删除、VDO、RAID磁盘阵列、查看进程命令、进程控制、进程管理

1 打开虚拟机 2 环境准备&#xff1a;添加一块新的80G硬盘 [rootlocalhost ~]# lsblk 80G硬盘进行&#xff08;MBR分区模式&#xff09;规划分区 划分3个10G的主分区;2个20G的逻辑分区 [rootlocalhost ~]# fdisk /dev/vdb n 创建主分区--->回车--->回车--->回车…

Vue3 + Electron框架读取程序外部配置文件

网上找了一堆都不行&#xff0c;根据这个步骤来肯定能用 1. 在项目下新建一个config.json文件 2. json文件中写入一些配置 3. vue.config.js中配置打包时把config.json文件copy到应用目录下 pluginOptions:{electronBuilder:{nodeIntegration:true,builderOptions: {extraReso…

MySQL表的基本插入查询操作详解

博学而笃志&#xff0c;切问而近思 文章目录 插入插入更新 替换查询全列查询指定列查询查询字段为表达式查询结果指定别名查询结果去重 WHERE 条件基本比较逻辑运算符使用LIKE进行模糊匹配使用IN进行多个值匹配 排序筛选分页结果更新数据删除数据截断表聚合函数COUNTSUMAVGMAXM…

怎样实现安全便捷的网间数据安全交换?

数据安全交换是指在数据传输过程中采取一系列措施来保护数据的完整性、机密性和可用性。网间数据安全交换&#xff0c;则是需要进行跨网络、跨网段甚至跨组织地进行数据交互&#xff0c;对于数据的传输要求会更高。 大部分企业都是通过网闸、DMZ区、VLAN、双网云桌面等方式实现…

2024美赛数学建模思路 - 案例:ID3-决策树分类算法

文章目录 0 赛题思路1 算法介绍2 FP树表示法3 构建FP树4 实现代码 建模资料 0 赛题思路 &#xff08;赛题出来以后第一时间在CSDN分享&#xff09; https://blog.csdn.net/dc_sinor?typeblog 1 算法介绍 FP-Tree算法全称是FrequentPattern Tree算法&#xff0c;就是频繁模…

redis数据安全(一)数据持久化

一、Redis数据安全措施: 1、将数据持久化至硬盘 2、将数据复制至其他机器&#xff1b; 复制是在数据持久化的基础上进行的。 二、将数据持久化至硬盘 1、介绍&#xff1a;Redis是一个基于内存的数据库&#xff0c;它的数据是存放在内存中&#xff0c;内存有个问题就是关闭…

Python中使用HTTP代理进行网络请求

在Python中&#xff0c;HTTP代理是一种常用的技术&#xff0c;用于控制和修改HTTP请求和响应。通过使用HTTP代理&#xff0c;我们可以更好地控制网络请求的行为&#xff0c;提高安全性、隐私性和效率。下面我们将详细介绍如何在Python中使用HTTP代理进行网络请求。 一、HTTP代…

风丘科技为您提供完整的ADAS测试方案

一 方案概述 随着5G通讯与互联网的快速发展&#xff0c;智能汽车和ADAS辅助系统的研究与发展在世界范围内也在如火如荼地进行。风丘科技紧跟时代脚步&#xff0c;经多年积累沉淀&#xff0c;携手整车厂与高校共同研发打造出了一套完整且适用于国内ADAS测试的系统方案。 | ADAS…

sql中的explain关键字用法

在SQL中&#xff0c;使用EXPLAIN关键字可以获取查询的执行计划&#xff0c;以便进行性能优化和查询调优。执行计划提供了关于查询操作的详细信息&#xff0c;涵盖了多个表头字段&#xff0c;每个字段都提供了特定的信息。以下是explain表头字段解释&#xff1a; id&#xff1…

工厂企业消防安全AI可视化视频智能监管解决方案

一、方案背景 2023年11月20日下午6时30分许&#xff0c;位于江苏省无锡市惠山区前洲街道的某公司突发严重火灾&#xff0c;共造成7人死亡。这次火灾提醒我们工业安全至关重要&#xff0c;企业都应该时刻保持警惕&#xff0c;加强安全意识和培训&#xff0c;提高应对突发事件的…

vue实现 marquee(走马灯)

样式 代码 <div class"marquee-prompt"><div class"list-prompt" refboxPrompt><span v-for"item in listPrompt" :title"item" class"prompt">{{item}}</span></div> </div>data() {…

探索 Python:发现有趣的库——第 3 章:玩转自然语言处理

代码侠和算法仙正在一间充满科技感的实验室里探讨自然语言处理&#xff08;NLP&#xff09;的奥秘。 代码侠&#xff1a; 嘿&#xff0c;算法仙&#xff0c;我最近在研究自然语言处理&#xff0c;但感觉有点复杂啊。 算法仙&#xff1a; 呵呵&#xff0c;别担心&#xff0c;我…

spring retry 配置及使用

spring retry 配置及使用 接口或功能因外界异常导致失败后进行重推机制 依赖 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.3.1.RELEASE</version></p…

tb网关中 如何转换数据,编写自定义转换规则,将自定义的复杂数据格式在网关层格式化,不借助规则链

通过网关上传的复杂格式数据 [{"host_time": 1700720548312,"device_id": "C20231123115931009","gateway_id": "ID20230508001","timestamp": 1700720548025,

【分布式监控】zabbix与grafana连接

1.在zabbix- server服务端安装grafana&#xff0c;并启动服务 先在官网下载软件 https://grafana.com/grafana/download/9.4.7?editionenterprise&pggraf&plcmtdeploy-box-1#可以翻译成中文介绍&#xff0c;很详细的教程 yum install -y https://dl.grafana.com/ent…

PDF转PowerPoint - Java实现方法

通过编程实现PDF转PPT的功能&#xff0c;可以自动化转换过程&#xff0c;减少手动操作的工作量&#xff0c;并根据需要进行批量转换。将PDF文件转换为PPT文档后&#xff0c;可以利用PPT的丰富功能和动画效果&#xff0c;达到更好的演示效果。 在Java中&#xff0c;我们可以使用…

100天精通鸿蒙从入门到跳槽——第5天:TypeScript 知识储备:函数

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通Golang》…

群晖NAS搭建WebDav结合内网穿透实现公网访问本地影视资源

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

爬虫代理IP在电商行业的应用

随着互联网的快速发展&#xff0c;电商行业已经成为人们购物的主要渠道之一。在电商行业中&#xff0c;数据分析和挖掘至关重要。爬虫代理IP作为一种能够提供大量模拟请求和收集数据的工具&#xff0c;被广泛应用于电商行业。下面介绍爬虫代理IP在电商行业中的应用。 1、保护隐…