当前位置: 首页 > news >正文

MySQL系列之索引入门(下)

前言

通过上文,我想各位盆友已熟悉MySQL的索引分类及其含义,那么如何合理的使用呢?
请继续围观此文,一探究竟!

在这里插入图片描述


一、创建索引

首先,我们一起学习索引是如何创建的,又有哪些方式。

1. create table

最直接的方式就是建表时创建,比如user表:

CREATE TABLE `user` (`user_id` varchar(8) COLLATE utf8mb4_bin NOT NULL COMMENT '用户编号',`user_name` varchar(200) COLLATE utf8mb4_bin NOT NULL COMMENT '用户名称',`user_type` char(3) COLLATE utf8mb4_bin NOT NULL COMMENT '用户类型',`create_time` datetime NOT NULL COMMENT '创建时间',PRIMARY KEY (`user_id`),KEY `index_user_type`(`user_type`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin COMMENT='用户表';

通过以上脚本,实现了主键索引和普通索引的定义和创建。如需指定索引类型,可按以下规则拼写:

[索引类型]UNIQUE|FULLTEXT|…
[索引关键字]INDEX|KEY
[索引名称]index_column_name([字段]column_name1,column_name2,…)

2. create index

第二种,在create table完成后,继续进行create index操作。比如:

CREATE INDEX index_user_type ON `user` (user_type);

通过以上脚本,实现了普通索引的定义和创建。如需指定索引类型,可按以下规则拼写:

[索引类型]UNIQUE|FULLTEXT|…
[索引关键字]INDEX
[索引名称]index_column_name
[索引关键字]ON
[表名]table_name ([字段]column_name1,column_name2,…)

3. alter table add index

第三种,在create table完成后,继续进行alter table add index操作。比如:

ALTER TABLE `user` ADD INDEX index_user_type(user_type);

通过以上脚本,实现了普通索引的定义和创建。如需指定索引类型,可按以下规则拼写:

ALTER TABLE
[表名]table_name
[索引关键字] ADD
[索引类型]UNIQUE|FULLTEXT|…
[索引关键字]INDEX
[索引名称]index_column_name([字段]column_name1,column_name2,…)

二、验证索引

通过创建索引操作,我们可以快速完成数据库性能的优化。但是,如果索引使用不当,也可能适得其反,无法如愿以偿。此刻,我们怎么办?请继续聚焦下一话题。

1. explain介绍

When EXPLAIN is used with an explainable statement, MySQL displays information from the optimizer about the statement execution plan. That is, MySQL explains how it would process the statement, including information about how tables are joined and in which order.

以上表述来自MySQL官方对explain的介绍,翻译后大致是:用于解释SQL的执行过程和顺序

怎么使用呢?很简单,直接上菜:

explain select * from table_name;

2. explain解读

当我们执行explain后,会返回一个结果,比如:
在这里插入图片描述
其中,每个字段的含义如下:

字段名称字段含义
id执行序号,遵从“从大到小,从上到下"的原则
select_type查询类型,可分为Simple、Primary、Union、DEPENDENT UNION、UNION RESULT、SUBQUERY、DEPENDENT SUBQUERY、DERIVED。不同类型代表SQL的复杂度不同
table表名,可以是物理表,也可以是虚拟表
partitions查询涉及的分区数量,如存在分区表生效
type类型,需重点关注,优化SQL的参考坐标。主要分为SYSTEM(有且仅有一行记录)、CONST(PRIMARY或UNIQUE)、EQ_REF(关联表PRIMARY或UNIQUE)、REF(普通KEY)、RANGE(范围)、INDEX(索引)、ALL(全表)
possible_keys可能使用的索引,实际不一定
key实际使用的索引
key_len索引长度,越短效率越高,精度越低
ref索引使用的列
rows检索的行数
filtered命中率
Extra额外信息

结语

索引就像目录,快速检索需要的内容。有效的利用索引,可以让应用性能更好,使用体验更佳。合理的创建索引,也需要经验的总结和积累,此技能是高性能开发必备。

今天过完年了,新春第一天,祝大家开工大吉!


精彩回放


MySQL系列之数据导入导出
MySQL系列之索引入门(上)


在这里插入图片描述

相关文章:

MySQL系列之索引入门(下)

前言 通过上文,我想各位盆友已熟悉MySQL的索引分类及其含义,那么如何合理的使用呢? 请继续围观此文,一探究竟! 一、创建索引 首先,我们一起学习索引是如何创建的,又有哪些方式。 1. create t…...

IO进程:fread\fwrite图像拷贝,read\write文件拷贝,时间函数

1.使用fread、fwrite实现图片拷贝 程序代码&#xff1a; 1 #include<myhead.h>2 int main(int argc, const char *argv[])3 {4 //判断传入文件个数5 if(argc!3)6 {7 printf("input file error\n");8 printf("usage:./a.out …...

基于java的企业校园招聘平台的设计与实现

分享一个自己的毕业设计&#xff0c;想要获取源码的同学加V&#xff1a;qq2056908377 链接&#xff1a;https://pan.baidu.com/s/1It0CnXUvc9KVr1kDcHWvEw 提取码&#xff1a;1234 摘要&#xff1a; 摘要&#xff1a;本毕业设计旨在设计和实现一个企业校园招聘平台&#xf…...

Rocky Linux网卡静态配置

一、开源系统 Rocky Linux 下载安装 1、安装教程 Rocky Linux 下载安装 二、远程工具 MobaXterm下载安装 1、安装教程 MobaXterm 下载安装 三、Rocky Linux 网卡配置 1、使用ip addr确认网卡名称&#xff08;此处可得知网卡为ens160&#xff09; [rootlocalhost ~]# ip a 1:…...

【C语言】通讯录(静态版本+动态版本)思路解析+完整源代码

通讯录 由于代码比较长&#xff0c;为了增加可读性&#xff0c;分成了contact.h&#xff0c;contact.c&#xff0c;test.c&#xff0c;分别用来声明函数或者类型&#xff0c;实现函数功能&#xff0c;测试代码 contact.h 我们希望通讯录具有增加联系人&#xff0c;删除联系人…...

spring boot自动装配及自动装配条件判断

第一步需要在pom.xml文件指定需要导入的坐标 要是没有自动提示需要检查maven有没有 实现代码 /*springboot第三方自动配置实现方法 * 什么是自动配置 自动配置就是springboot启动自动加载的类不需要在手动的控制反转自动的加入bean中 * * *//*第一种方案包扫描 不推荐因为繁琐…...

LeetCode--2298. 周末任务计数

文章目录 1 题目描述2 测试用例3 解题思路 1 题目描述 表: Tasks ------------------- | Column Name | Type | ------------------- | task_id | int | | assignee_id | int | | submit_date | date | -------------------task_id 是该表的主键&#xff08;具有唯一值…...

从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作

NIO基础 1.三大组件 1.1. Channel & Buffer Channel 在Java NIO&#xff08;New I/O&#xff09;中&#xff0c;“Channel”&#xff08;通道&#xff09;是一个重要的概念&#xff0c;用于在非阻塞I/O操作中进行数据的传输。Java NIO提供了一种更为灵活和高效的I/O处理方…...

Chatgpt润色文章“咒语”

文章目录 前言一、汉译英二、语法校正三、润色英文段落结构和句子逻辑 前言 一些Chatgpt润色文章常用的命令。 一、汉译英 I am a researcher studying Aerospace Manufacturing and now trying to revise my manuscript which will be submitted to the journal of Nature.I…...

【OpenGL教程2】 简单案例介绍Python 中的 OpenGL

目录 一、介绍二、安装三、编码练习四、结论 一、介绍 在本教程中&#xff0c;我们将学习如何在 Python 中使用PyOpenGL库。OpenGL是一个图形库&#xff0c;受Windows、Linux和MacOS等多个平台支持&#xff0c;也可用于多种其他语言&#xff1b;然而&#xff0c;这篇文章的范围…...

评估方法:CMMI/能力成熟度模型集成

一、什么是CMMI CMMI&#xff0c;全称为Capability Maturity Model Integration&#xff0c;即能力成熟度模型集成。它是由美国卡内基梅隆大学软件工程研究所研发的过程改进模型&#xff0c;也是国际上用于评价软件企业能力成熟度的一项重要标准。 CMMI的目的是帮助软件企业对…...

Gin框架: HTML模板渲染之配置与语法详解

Gin的HTML模板配置 1 &#xff09;单一目录的配置 配置模板目录&#xff0c;在与main.go同级下, 新建目录&#xff0c;下面二选一&#xff0c;仅作举例, 这里选择 tpls templatestpls 在 tpls 目录下新建 news.html <!-- 最简单的 --> <h1>News Page</h1>&l…...

.NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库

一、效果 记录日志为文档 记录日志到数据库 二、添加NuGet包 三、log4net.config代码配置 <?xml version"1.0" encoding"utf-8" ?> <log4net><!-- Debug日志 --><appender name"RollingFileDebug" type"log4net…...

Day36 贪心算法 part05

划分字母区间 一个字母区间仅有几个字母前一个字母区间有的字母后面都没有 合并区间 天才举一反三写出来了...

C#计算矩形面积:通过定义结构 vs 通过继承类

目录 一、涉及到的知识点 1.结构 2.结构和类的区别 3.继承 4.使用类继承提高程序的开发效率 5.属性 &#xff08;1&#xff09;属性定义 &#xff08;2&#xff09;get访问器 &#xff08;3&#xff09;set访问器 6. 属性和字段的区别 二、实例&#xff1a;通过定义…...

【复现】Panalog大数据日志审计系统 RCE漏洞_51

目录 一.概述 二 .漏洞影响 三.漏洞复现 1. 漏洞一&#xff1a; 四.修复建议&#xff1a; 五. 搜索语法&#xff1a; 六.免责声明 一.概述 Panalog大数据日志审计系统定位于将大数据产品应用于高校、 公安、 政企、 医疗、 金融、 能源等行业之中&#xff0c;针对网络流…...

react【五】redux/reduxToolkit/手写connext

文章目录 1、回顾纯函数2、redux2.1 redux的基本使用2.2 通过action修改store的数值2.3 订阅state的变化2.4 目录结构2.5 Redux的使用过程2.6 redux的三大原则2.7 Redux官方图 3、redux在React中的使用4、react-redux使用4.1 react-redux的基本使用4.2 异步请求 redux-thunk4.3…...

.NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2

前言 很多同学都不愿给电脑设动态壁纸&#xff0c;其中有个重要原因就是嫌它占资源过多。今天大姚分享一个.NET开源、免费&#xff08;MIT license&#xff09;的一个小而快并且功能强大的 Windows 动态桌面软件&#xff0c;支持视频和网页动画播放&#xff1a;DreamScene2。 …...

jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 计算机线上教学系统是一套完善的java web信息管理系统&#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。开发环境为 TOMCAT7.0,Myeclipse8.5开发&#xff0c;数据库为Mysql5…...

RabbitMQ的高可用机制

RabbitMQ通过多种机制提供高可用性(HA)支持&#xff0c;以确保消息系统的稳定性和可靠性。下面将详细介绍这些机制&#xff0c;并提供代码示例。 集群&#xff08;Clustering&#xff09; RabbitMQ的集群提供了高可用性和负载均衡。集群中的节点共享同一个Erlang分布式数据库…...

ReFS文件系统数据恢复实战:对比DiskGenius,为什么refsutil在Server 2019上更靠谱?

ReFS文件系统数据恢复深度解析&#xff1a;专业工具对比与实战指南在企业级存储环境中&#xff0c;ReFS&#xff08;弹性文件系统&#xff09;因其强大的数据完整性和容错能力而备受青睐。然而当灾难发生时&#xff0c;如何高效恢复ReFS分区中的数据成为存储工程师面临的关键挑…...

基于RTK-GPS与ResNet50的自主草坪清扫机器人系统设计与实践

1. 项目概述与核心挑战在公园维护的日常工作中&#xff0c;草坪垃圾清理是一项既耗费人力又效率低下的重复性劳动。传统的清扫方式要么依赖人工&#xff0c;要么使用大型、笨重且可能损伤草皮的设备。我们团队的目标&#xff0c;是设计并实现一个能够自主、高效且温和地完成这项…...

JWT签名机制与常见攻击实战:从PortSwigger靶场12关学透算法混淆、密钥混淆与JWKS劫持

1. 为什么JWT不是“加密令牌”&#xff0c;而是“签名凭证”——从PortSwigger靶场第一关开始讲起很多人一看到JWT就下意识觉得&#xff1a;“这是个加密的token&#xff0c;只要我拿到它&#xff0c;就等于拿到了用户密码或者敏感密钥。”这种误解直接导致他们在实战中反复碰壁…...

Rust异步编程实战:构建高性能并发应用

引言 异步编程是构建高性能后端服务的关键技术。作为从Python转向Rust的开发者&#xff0c;我发现Rust的异步模型与Python有很大不同。Rust的异步编程基于协程和事件驱动&#xff0c;通过Tokio运行时实现高效的并发执行。本文将深入探讨Rust异步编程的核心概念、实践模式和性能…...

RuoYi接口调试:Postman作为Spring Boot权限系统可信信使

1. 为什么RuoYi项目里Postman不是“配角”&#xff0c;而是调试生命线在RuoYi开发实战中&#xff0c;很多人把Postman当成一个“临时工具”——写完接口顺手点一下&#xff0c;成功了就扔一边&#xff0c;失败了就切回IDE疯狂加日志、重启服务、反复试错。我带过三届实习生&…...

AI量化交易中的信号相关性与认知依赖:系统性风险与应对策略

1. 项目概述&#xff1a;当AI成为市场共识&#xff0c;系统性风险如何被“编程”&#xff1f;在金融市场的交易大厅和量化部门的代码仓库里&#xff0c;一场静默的变革已经持续了十年。这不是关于某个算法战胜了市场&#xff0c;而是关于市场本身正在被算法重新定义。核心矛盾在…...

【AI Daily】Arxiv论文研读Top5 | 2026-05-23

&#x1f4da; 每日学习汇总 | 2026-05-23&#xff08;周6&#xff09; &#x1f4ca; 今日概览 今日&#xff1a;周6&#xff0c;午读检索分类&#xff1a;cs.AI / q-bio.NC / cs.HC关键词&#xff1a;cognitive science behavioral AI alignment&#x1f525; 五篇精读速报 ①…...

C++虚函数与多态机制

C虚函数与多态机制虚函数是C实现运行时多态的核心机制。通过虚函数表和虚函数指针&#xff0c;C能够在运行时根据对象的实际类型调用相应的函数实现。虚函数的基本语法使用virtual关键字声明&#xff0c;派生类可以重写基类的虚函数。#include #include #includeclass Animal {…...

对比一圈后 AI智能降重工具深度测评与推荐

2026年真正好用的AI论文降重与改写工具&#xff0c;核心看降重效果、去AI味、格式保留、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 …...

昇腾CANN manifest:仓库清单与版本管理实战

55 个独立仓库&#xff0c;每个仓库独立迭代——CANN 8.0 里的 ops-transformer 是哪个 commit&#xff1f;hccl 是 v2.1.3 还是 v2.2.0&#xff1f;runtime 和 driver 的版本是否兼容&#xff1f;manifest 仓库用一份 XML 格式的清单文件回答了所有这些问题。它是 CANN 发行版…...