MySQL系列之索引入门(下)

news2024/10/4 14:56:29

前言

通过上文,我想各位盆友已熟悉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系列之索引入门(上)


在这里插入图片描述

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

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

相关文章

IO线程进程

代码练习 使用fread和fwrite完成两个文件的拷贝 #include<myhead.h>int main(int argc, const char *argv[]) {FILE *fp NULL;//重新以只读的形式打开文件if((fp fopen("./OIP-C.bmp", "r")) NULL){perror("fopen error");return -1;…

stm32--笔记

一、引脚与变量 ​​​​​​​​​​​​​​ 二、STM32时钟 [STM32-时钟系统详解_stm32时钟_KevinFlyn的博客-CSDN博客] 三、定时器中断实验 1、定时器中断实验 ​ stm32关于通用定时器的周期、频率计算公式_stm32tim频率计算_胶囊咖啡的博客-CSDN博客 ​ 【STM32】通用…

阿里云服务器CPU内存配置怎么选择够用?

阿里云服务器配置怎么选择&#xff1f;根据实际使用场景选择&#xff0c;个人搭建网站可选2核2G配置&#xff0c;访问量大的话可以选择2核4G配置&#xff0c;企业部署Java、Python等开发环境可以选择2核8G配置&#xff0c;企业数据库、Web应用或APP可以选择4核8G配置或4核16G配…

【已解决】引发的异常: 0xC0000005: 读取位置 0xFFFFFFFFFFFFFFFF 时发生访问冲突。

这种问题产生一般都会手足无措&#xff0c;包括笔者&#xff0c;但是不要慌&#xff0c;这种问题一般都是内存泄漏引起的。例如读者要访问一个已经被析构或者释放的变量&#xff0c;当然访问不了&#xff0c;导致存在问题。这时候读者应该从哪里产生内存泄漏这方面进行考虑&…

【C深剖】数组名的细节

本系列博客为个人刷题思路分享&#xff0c;有需要借鉴即可。 引言&#xff1a;我想我说的这个数组名细节可能很多人并没有留意&#xff0c;现在先来C设计者这样设计也很合理。 就是数组名本质上是一个指针&#xff0c;但是这个指针的内容也就是说指向的空间是固定的&#xff0c…

IO 作业 24/2/19

1> 使用fread和fwrite完成两个文件的拷贝 #include <myhead.h> int main(int argc, const char *argv[]) {//定义被复制文件指针FILE *fp1NULL;if((fp1fopen("./111.bmp","r"))NULL){perror("error open");return -1;}//定义目标文件指…

OpenAI划时代大模型——文本生成视频模型Sora作品欣赏(三)

Sora介绍 Sora是一个能以文本描述生成视频的人工智能模型&#xff0c;由美国人工智能研究机构OpenAI开发。 Sora这一名称源于日文“空”&#xff08;そら sora&#xff09;&#xff0c;即天空之意&#xff0c;以示其无限的创造潜力。其背后的技术是在OpenAI的文本到图像生成模…

【数据结构与算法】手搓JDK底层ArrayList底层 - 动态数组

数组 在介绍数组之前&#xff0c;我们先来看一段chatGPT给出的对于数组描述&#xff1a; 数组&#xff08;Array&#xff09;是一种线性数据结构&#xff0c;它由一组连续的内存空间组成&#xff0c;用来存储相同类型的数据元素。数组具有固定的大小&#xff0c;一旦创建后&a…

Gitlab中CICD提交代码后,运行报错:Preparation failed: Cannot connect to the Docker daemon

目录 1.1、错误描述 1.2、解决方案 1.1、错误描述 今天工作中&#xff0c;合并到了几个Git分支上的代码到dev环境&#xff0c;触发Gitlab流水线进行打包构建的时候&#xff0c;突然报错了&#xff0c;结果如下&#xff1a; 点进去查看具体的报错日志&#xff0c;报错信息见下…

【每周AI简讯】OpenAI推出王炸文生视频模型Sora

ChatGPT中文版https://ai7.pro OpenAI推出王炸文生视频模型Sora OpenAI 宣布推出名为 Sora 的新型文本到视频模型。Sora 能根据用户的文本提示&#xff0c;生成长达一分钟的逼真视频。它可以创造出细节丰富的场景、复杂的摄影机运动以及表情丰富的多个角色。Sora 是一种扩散模…

PyCharm 主题和字体 (Scheme Editor Font)

PyCharm 主题和字体 [Scheme & Editor Font] References Scheme & Editor Font File -> Settings -> Editor -> Colors & Fonts -> Font Show only monospaced fonts&#xff1a; 只显示等宽字体。编程时使用等宽字体效果较好。 References [1] Yon…

前端win10如何设置固定ip(简单明了)

1、右击这个 2、点击属性 3、双击协议版本4设置成以下就ok

基于Springboot+Vue的超市管理系统源码

✌全网粉丝20W,csdn特邀作者、博客专家、CSDN新星计划导师、java领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f345;文末获取项目下载方式&#x1f345; 一、项目背景介绍&#xff1a; 随着社会经济的发展和…

第三百五十五回

文章目录 1. 概念介绍2. 获取方法3. 示例代码4. 对比与总结4.1 横向对比4.2 内容总结 我们在上一章回中介绍了"如何获取当前系统语言"相关的内容&#xff0c;本章回中将介绍如何获取当前时区.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们使用的…

探索与实践:深度解读禅道项目管理工具的高效运用

【引言】 在日益复杂的现代项目管理领域中&#xff0c;一款优秀的项目管理工具能够极大地提升团队协作效率&#xff0c;降低项目风险&#xff0c;而禅道正是这样一款深受开发者和项目经理喜爱的产品。它是一款基于敏捷开发理念设计的开源项目管理软件&#xff0c;涵盖了产品管…

One API初体验

前言 忘了在微信公众号是先看到了FastGPT还是One API了&#xff0c;反正对于自己来说知识库或One API都是个新东西&#xff0c;都有很强大的活力。One API在我看来&#xff0c;可能更基础、部署更简单一些&#xff0c;于是打算先搞个One API部署来看看。 One API是开源的&…

使用openai-whisper实现语音转文字

使用openai-whisper实现语音转文字 1 安装依赖 1.1 Windows下安装ffmpeg FFmpeg是一套可以用来记录、转换数字音频、视频&#xff0c;并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。 # ffmpeg官网 https://ffm…

业务型 长时间组件封装(复制即可使用)

{/*disabledAfter 日期限制 例如传入5 则只能选择今天日期5天内的时间 */} import React from react; import { DatePicker } from antd; import moment from moment;const { RangePicker } DatePicker;const CustomRangePicker ({ value, onChange, disabledAfter, ...restP…

小迪安全2023最新版笔记集合--续更

小迪安全2023最新版笔记集合–续更 小迪安全2023最新笔记集合 章节一 ---- 基础入门&#xff1a; 知识点集合&#xff1a; 应用架构&#xff1a;Web/APP/云应用/三方服务/负载均衡等 安全产品&#xff1a;CDN/WAF/IDS/IPS/蜜罐/防火墙/杀毒等 渗透命令&#xff1a;文件上传下…

Linux——开发工具的使用

目录 Linux软件包管理器 yum rzsz Linux编辑器——vim vim的使用 vim的基本操作 命令模式的常见命令 底行模式的常见命令 vim是需要配置的 Linux编译器——gcc/g 预处理 编译 汇编 链接 函数库 Linux项目自动化构建工具 make/makefile make原理 项目清理 Linux调试器g…