加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程 > 正文

一通骚操纵,我把SQL执行服从进步了10000000倍!

发布时间:2019-06-21 21:55:19 所属栏目:编程 来源:风过无痕
导读:场景 我用的数据库是mysql5.6,下面简朴的先容了局景 课程表: createtableCourse( c_idintPRIMARYKEY, namevarchar(10) ) 数据100条 门生表: createtableStudent( idintPRIMARYKEY, namevarchar(10) ) 数据70000条 门生后果表SC CREATEtableSC( sc_idintP

时刻: 1.076s,竟然时刻还变长了,什么缘故起因?查察执行打算:

一通骚操纵,我把SQL执行服从进步了10000000倍!

优化后的查询语句为:

  1. SELECT `YSB`.`s`.`s_id` AS `s_id`, `YSB`.`s`.`name` AS `name`FROM `YSB`.`Student` `s`JOIN `YSB`.`SC` `sc`WHERE ( ( `YSB`.`sc`.`s_id` = `YSB`.`s`.`s_id` ) AND (`YSB`.`sc`.`score` = 100) AND (`YSB`.`sc`.`c_id` = 0) ) 

貌似是先做的毗连查询,再举办的where前提过滤

回到前面的执行打算:

一通骚操纵,我把SQL执行服从进步了10000000倍!

这里是先做的where前提过滤,再做连表,执行打算还不是牢靠的,那么我们先看下尺度的sql执行次序:

一通骚操纵,我把SQL执行服从进步了10000000倍!

正常环境下是先join再举办where过滤,可是我们这里的环境,假如先join,将会有70w条数据发送join做操,因此先执行where过滤是明智方案

此刻为相识除mysql的查询优化,我本身写一条优化后的sql

  1. SELECT    s.*FROM    (        SELECT            *        FROM            SC sc        WHERE            sc.c_id = 0        AND sc.score = 100    ) tINNER JOIN Student s ON t.s_id = s.s_id 

即先执行sc表的过滤,再举办表毗连,执行时刻为:0.054s

和之前没有建s_id索引的时刻差不多,查察执行打算:

一通骚操纵,我把SQL执行服从进步了10000000倍!

先提取sc再连表,这样服从就高多了,此刻的题目是提取sc的时辰呈现了扫描表,那么此刻可以明晰必要成立相干索引

  1. CREATE index sc_c_id_index on SC(c_id);CREATE index sc_score_index on SC(score); 

再执行查询:

  1. SELECT    s.*FROM    (        SELECT            *        FROM            SC sc        WHERE            sc.c_id = 0        AND sc.score = 100    ) tINNER JOIN Student s ON t.s_id = s.s_id 

执行时刻为:0.001s,这个时刻相等靠谱,快了50倍

执行打算:

一通骚操纵,我把SQL执行服从进步了10000000倍!

我们会看到,先提取sc,再连表,都用到了索引。

那么再来执行下sql

  1. SELECT s.* from 
  2. Student s 
  3. INNER JOIN SC sc 
  4. on sc.s_id = s.s_id 
  5. where sc.c_id=0 and sc.score=100 

执行时刻0.001s

执行打算:

一通骚操纵,我把SQL执行服从进步了10000000倍!

这里是mysql举办了查询语句优化,先执行了where过滤,再执行毗连操纵,且都用到了索引。

最近又从头导入一些出产数据,经测试发明,前几天优化完的sql执行服从又变低了

调解内容为SC表的数据增添到300W,门生分数更为离散。

先回首下:

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

热点阅读