本文整理自网络,侵删。
目录
- 1、准备工作
- 2、初识解释计划
- 3、字段详解
- 4、partitions 查询涉及到的分区
- 5、type 查询的类型
- 6、possible_keys:预计可能使用的索引
- 7、key:实际查询的过程中使用的索引
- 8、key_len
- 9、ref 显示该表的索引字段关联了哪张表的哪个字段
- 10、rows:根据表统计信息及选用情况,大致估算出找到所需的记录或所需读取的行数,数值越小越好
- 11、filtered:返回结果的行数占读取行数的百分比,值越大越好
- 12、extra
- 总结
1、准备工作
准备三张表,一张角色表,一张装备表,一张基础数据表,这里只展示一些教程中需要的字段,在游戏开发的过程中肯定不止这么几个字段,我想大家都懂的。
角色表:
CREATE TABLE `role` ( `n_role_id` int DEFAULT NULL, `s_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
装备表:
CREATE TABLE `equip` ( `n_equip_id` int DEFAULT NULL, `s_equip_name` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL, `n_config_id` int DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
装备配置表
CREATE TABLE `dict_equip` ( `n_equip_id` int DEFAULT NULL, `s_desc` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_bin DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;
2、初识解释计划
有两种方式可以查看解释计划:
1、命令的方式:explain sql,或者 desc sql ,两个命令都可以,我觉得记住explain比较好,单词很直接。
2、借助工具 Navicat(其他的不熟,估计也有),点击查询窗口的解释,可以不用加关键字explain
可以看到结果里面包含了很多列,有的是null 有的有值,只要我们看懂了解释计划是不是就可以有的放矢的优化sql。
3、字段详解
解释计划的字段还是蛮多的,Navicat显示了12个字段,有些字段我们需要重点关注,有些知道怎么回事就好了。
官方的文档解释:https://dev.mysql.com/doc/refman/5.7/en/explain-output.html
1、id 执行的顺序
id 是select的执行顺序,id越大优先级越高,越先被执行,id 相同时 下面的先执行.
原因是因为执行子查询时,先查内层的,再查外层
SELECT de.* FROM dict_equip de WHERE de.n_equip_id = ( SELECT n_equip_id FROM equip e WHERE e.n_role_id = ( SELECT n_role_id FROM role r WHERE r.s_name = '香菜' ) )
从上面的执行计划可以看到先执行了查询role表,后执行了equip ,最后执行了 dict_equip
相关阅读 >>
更多相关阅读请进入《sql》频道 >>
数据库系统概念 第6版
机械工业出版社
本书主要讲述了数据模型、基于对象的数据库和XML、数据存储和查询、事务管理、体系结构等方面的内容。
转载请注明出处:木庄网络博客 » SQL优化老出错,那是你没弄明白MySQL解释计划用法
标签:sql
相关推荐
评论
管理员已关闭评论功能...