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

一次很是风趣的SQL优化经验

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

正常环境下是先join再举办where过滤,可是我们这里的环境,假如先join,将会有70w条数据发送join,因此先执行where过滤是明智方案,此刻为相识除mysql的查询优化,我本身写一条优化后的sql

  1. SELECT  
  2.     s.*  
  3. FROM  
  4.     (  
  5.         SELECT  
  6.             *  
  7.         FROM  
  8.             SC sc  
  9.         WHERE  
  10.             sc.c_id = 0  
  11.         AND sc.score = 100  
  12.     ) t  
  13. INNER JOIN Student s ON t.s_id = s.s_id 

即先执行sc表的过滤,再举办表毗连

执行时刻为:0.054s

和之前没有建s_id索引的时刻差不多

查察执行打算:

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

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

再执行查询:

  1. SELECT  
  2.     s.*  
  3. FROM  
  4.     (  
  5.         SELECT  
  6.             *  
  7.         FROM  
  8.             SC sc  
  9.         WHERE  
  10.             sc.c_id = 0  
  11.         AND sc.score = 100  
  12.     ) t  
  13. INNER JOIN Student s ON t.s_id = s.s_id 

执行时刻为:0.001s

这个时刻相等靠谱,快了50倍

执行打算:

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

(编辑:湖南网)

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

热点阅读