EXPLAIN简介
explain命令可以查看SQL语句的执行计划。当explain与SQL语句一起使用时,MySQL将显示来自优化器的有关语句执行计划的信息。也就是说,MySQL解释了它将如何处理语句,包括有关如何联接表以及以何种顺序联接表的信息。
那么,explain能做什么?
- 分析出表的读取顺序
- 数据读取操作的操作类型
- 哪些索引可以使用
- 哪些索引被实际使用
- 表之间的引用
- 每张表有多少行被优化器查询
explain的使用很简单,只需要在SQL语句前面加上explain命令即可,除了select语句之外,explain也能分析insert、update和delete语句。使用之后,我们可以对explain的结果进行分析,如下图所示
索引的基本使用
索引是一种特殊的数据结构,类似于图书的目录,它能够极大的提升数据库的查询效率。如果没有索引,在查询数据时必须扫描表中的所有记录才能找出符合条件的记录,这种全表扫描的查询效率非常低。生活中常见的索引应用,比如楼层索引、字母索引等。
索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可以快速地访问数据库表中的特定记录。
- 数据库的索引好比图书的目录,能够加快数据库的查询记录。
- 索引是快速搜索的关键,如果不加索引,查找任何一条特定的数据都会进行一次全表扫描。
索引的种类图如下图所示。
- 创建普通索引:
CREATE INDEX indexName ON tableName(columnName(length));
- 创建唯一索引:
CREATE UNIQUE INDEX indexName ON tableName(columnName(length));
- 创建复合索引:
CREATE INDEX indexName ON tableName(columnName1, columnName2, ...);
- 删除索引:
DROP INDEX [indexName] ON tableName;
- 查看索引:
SHOW INDEX FROM tableName;
实战中,索引的使用规则与注意事项如下图所示。
例子
1.连接数据库,使用student数据库并展示其所有的数据表
USE student;
SHOW TABLES;
效果图:
2. 使用select语句查询employee数据表的所有记录
SELECT * FROM employee;
效果图:
3. 使用两种不同的where条件查询同一条记录,比较用时
SELECT * FROM employee WHERE name = '刘峰';
SELECT * FROM employee WHERE id = 13;
效果图:
4. 发现上一步的用时几乎一样,或者是没有区别,我们使用explain来分析两条语句的具体差别
EXPLAIN SELECT * FROM employee WHERE name = '刘峰'\G;
EXPLAIN SELECT * FROM employee WHERE id = 13\G;
效果图:
由此可以看出,当数据量非常庞大时,是否使用索引关系到语句执行的效率
5. 查看employee数据表的索引
SHOW INDEX FROM employee\G;
效果图:
6. 查看第3步语句的分析结果(未设置索引)
EXPLAIN SELECT * FROM employee WHERE name = '刘峰';
效果图:
7. 为employee数据表的name字段设置索引,索引名为idx_name
CREATE INDEX idx_name ON employee(name);
效果图:
8. 查看第3步语句的分析结果(已设置索引)
EXPLAIN SELECT * FROM employee WHERE name = '刘峰';
效果图:
9. 去掉刚刚设置好的索引
DROP INDEX idx_name ON employee;
效果图:
10. 显示employee数据表的索引
SHOW INDEX FROM employee\G;
效果图:
注:本文是博主MySQL学习的总结,不支持任何商用,转载请注明出处!如果你也对MySQL学习有一定的兴趣和理解,欢迎随时找博主交流~