当前位置: 首页 > 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系列之索引入门(上)


在这里插入图片描述

http://www.lryc.cn/news/302382.html

相关文章:

  • IO进程:fread\fwrite图像拷贝,read\write文件拷贝,时间函数
  • 基于java的企业校园招聘平台的设计与实现
  • Rocky Linux网卡静态配置
  • 【C语言】通讯录(静态版本+动态版本)思路解析+完整源代码
  • spring boot自动装配及自动装配条件判断
  • LeetCode--2298. 周末任务计数
  • 从零开始学习Netty - 学习笔记 - NIO基础 - ByteBuffer: 简介和基本操作
  • Chatgpt润色文章“咒语”
  • 【OpenGL教程2】 简单案例介绍Python 中的 OpenGL
  • 评估方法:CMMI/能力成熟度模型集成
  • Gin框架: HTML模板渲染之配置与语法详解
  • .NET Core WebAPI中使用Log4net 日志级别分类并记录到数据库
  • Day36 贪心算法 part05
  • C#计算矩形面积:通过定义结构 vs 通过继承类
  • 【复现】Panalog大数据日志审计系统 RCE漏洞_51
  • react【五】redux/reduxToolkit/手写connext
  • .NET开源的一个小而快并且功能强大的 Windows 动态桌面软件 - DreamScene2
  • jsp计算机线上教学系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • RabbitMQ的高可用机制
  • 人机协同中的贝叶斯和马尔可夫
  • STM32的SDIO
  • Unity中的Lerp插值的使用
  • 年后上来面了一个来字节要求月薪23K,明显感觉他背了很多面试题...
  • 代码随想录算法训练营DAY20 | 二叉树 (8)
  • 2023年全球软件开发大会(QCon北京站2023)2月:核心内容与学习收获(附大会核心PPT下载)
  • 键盘输入4个数,从小到大排序
  • Day11-Linux系统iNode及链接知识及企业按哪里精讲
  • C# Thread的使用
  • ETL数据集成工具DataX、Kettle、ETLCloud特点对比
  • OpenAI:Sora视频生成模型技术报告(中文)