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