Mysql数据库的索引使用-系列10

首先介绍下索引:

MySQL 中的索引,相当于图书馆的检索目录,它是帮助 MySQL 系统快速检索数据的一种存储结构。我们可以在索引中按照查询条件,检索索引字段的值,然后快速定位数据记录的位置,这样就不需要遍历整个数据表了。而且,数据表中的字段越多,表中数据记录越多,速度提升越是明显。

索引的分类:

1、单字段索引

你可以通过 CREATE 语句直接给已经存在的表创建索引;

可以在创建表的同时创建索引;

可以通过修改表来创建索引。


CREATE INDEX 索引名 ON TABLE 表名 (字段);

CREATE TABLE 表名
(
字段 数据类型,
….
{ INDEX | KEY } 索引名(字段)
)

ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段);

加了索引有没有效果,我们可以直接看表的执行时间。

如果看细节,我们可以用mysql的关键字 EXPLAIN ,这也是mysql性能优化常用的手段。

找了一个例子:


mysql> EXPLAIN SELECT
-> quantity,price,transdate
-> FROM
-> demo.trans
-> WHERE
-> transdate > '2020-12-12'
-> AND transdate < '2020-12-13'
-> AND itemnumber = 100;
+----+-------------+-------------+------------+-------+-------------------+-------------------+---------+------+------+----------+-----------------------------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+-------------+------------+-------+-------------------+-------------------+---------+------+------+----------+-----------------------------------------------+
| 1 | SIMPLE | trans | NULL | range | index_trans | index_trans | 6 | NULL | 5411 | 10.00 | Using index condition; Using where; Using MRR |
+----+-------------+-------------+------------+-------+-------------------+-------------------+---------+------+------+----------+-----------------------------------------------+
1 row in set, 1 warning (0.00 sec)

简单分析如下:(具体的执行计划的详细讲解,单独写一篇)

type=range:表示使用索引查询特定范围的数据记录。

rows=5411:表示需要读取的记录数。

possible_keys=index_trans:表示可以选择的索引是 index_trans。

key=index_trans:表示实际选择的索引是 index_trans。

extra=Using index condition;Using where;Using MRR:这里面的信息对 SQL 语句的执行细节做了进一步的解释,包含了 3 层含义:第一个是执行时使用了索引,第二个是执行时通过 WHERE 条件进行了筛选,第三个是使用了顺序磁盘读取的策略。

2、组合索引

实际工作中,我们也可能遇到几个字段的组合索引场景。MySQL 最多支持由 16 个字段组成的组合索引。语法结构如下:


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

CREATE TABLE 表名
(
字段 数据类型,
….
{ INDEX | KEY } 索引名(字段1,字段2,...)
)

ALTER TABLE 表名 ADD { INDEX | KEY } 索引名 (字段1,字段2,...);

经验所得:这里需要注意的是:组合索引的多个字段是有序的,遵循左对齐的原则(即在条件中要一次按照组合索引创建的顺序从左向右写sql)

如果只用组合索引的一部分,效果没有单字段索引那么好。

最后补充下删除索引和改变索引


DROP INDEX 索引名 ON 表名;

ALTER TABLE 表名 DROP PRIMARY KEY;

猜你喜欢

转载自blog.csdn.net/LB_Captain/article/details/121434747
今日推荐