SQL性能问题Explain-id

a.分析SQL的执行计划 : explain ,可以模拟SQL优化器执行SQL语句,从而让开发人员 知道自己编写的SQL状况

   

b.MySQL查询优化其会干扰我们的优化

   

优化方法,官网:https://dev.mysql.com/doc/refman/5.5/en/optimization.html

   

   

查询执行计划: explain +SQL语句 explain select * from tb ;

   

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') ;

   

查询课程编号为2 或 教师证编号为3 的老师信息

explain +sql:

(1)id: id值相同,从上往下 顺序执行。

t3-tc3-c4

tc3--c4-t6

   

表的执行顺序 因数量的个数改变而改变的原因: 笛卡儿积

   

a

b

c

  

  

4

3

2

3*4*2 = 24

2*3*4 = 24

数据小的表 优先查询;

   

id值不同:id值越大越优先查询 (本质:在嵌套子查询时,先查内层 再查外层)

   

查询教授SQL课程的老师的描述(desc)

        explain select tc.tcdesc from teacherCard tc,course c,teacher t where c.tid = t.tid and t.tcid = tc.tcid and c.cname = 'sql' ;

   

将以上 多表查询 转为子查询形式:

  explain select tc.tcdesc from teacherCard tc where tc.tcid =

     (select t.tcid from teacher t where  t.tid =  

            (select c.tid from course c where c.cname = 'sql')

        );

   

   

子查询+多表:

  explain select t.tname ,tc.tcdesc from teacher t,teacherCard tc where t.tcid= tc.tcid and t.tid = (select c.tid from course c where cname = 'sql') ;

   

   

id值有相同,又有不同: id值越大越优先;id值相同,从上往下 顺序执行

posted @ 2020-10-29 18:22  黑质白章  阅读(153)  评论(0编辑  收藏  举报