SQL性能问题的探索

需要我们使用explain分析SQL的执行计划。

该执行计划可以模拟SQL优化器执行SQL语句,可以帮助我们了解到自己编写SQL的好坏。

SQL优化器自动优化:最开始讲述MySQL执行原理的时候,我们已经知道MySQL有一个优化器,当你写了一个SQL语句的时候,SQL优化器如果认为你写的SQL语句不够好,就会自动写一个好一些的等价SQL去执行。


SQL优化器自动优化功能【会干扰】我们的人为优化功能。当我们查看了SQL执行计划以后,如果写的不好,我们会去优化自己的SQL。当我们以为自己优化的很好的时候,最终的执行计划,并不是按照我们优化好的SQL语句来执行的,而是有时候将我们优化好的SQL改变了,去执行。


SQL优化是一种概率问题,有时候系统会按照我们优化好的SQL去执行结果(优化器觉得你写的差不多,就不会动你的SQL)。有时候优化器仍然会修改我们优化好的SQL,然后再去执行。


1)查看执行计划

语法:explain + SQL语句

eg:explain select * from tb;


2)“执行计划”中需要知道的几个“关键字”

关键字说明
id编号
select_type
查询类型
table

type
类型
possible_keys
预测用到的索引
key
实际使用的索引
key_len
实际使用索引的长度
ref
表之间的引用
rows
通过索引查询到的数据量
Extra
额外的信息

建表语句和插入数据:

#建表语句 create table course ( cid int(3), cname varchar(20), tid int(3) ); 
create table teacher ( tid int(3), tname varchar(20), tcid int(3) ); 
create table teacherCard ( tcid int(3), tcdesc varchar(200) ); 
#插入数据 insert into course values(1,'java',1); 
insert into course values(2,'html',1); 
insert into course values(3,'sql',2); 
insert into course values(4,'web',3); 
insert into teacher values(1,'tz',1); 
insert into teacher values(2,'tw',2); 
insert into teacher values(3,'tl',3); 
insert into teacherCard values(1,'tzdesc'); 
insert into teacherCard values(2,'twdesc'); 
insert into teacherCard values(3,'tldesc');
腾讯云推出云产品限时特惠抢购活动:2C2G云服务器7.9元/月起
本文链接:https://www.jhelp.net/p/wefUrHaCMSMhbCYc (转载请保留)。
关注下面的标签,发现更多相似文章