做了一次sql脚本的优化

简介:

做了一次sql脚本的优化。

结果还是比较满意的。执行时间从2分半钟降到了3秒左右。但是从过程中看,其实得到这个结果并不是因为优化做得多么出色,而是因为以前的脚本写得太烂。换句话说,这一次的优化并不是把一个正常的脚本修改得很出色,而是把一个糟糕的脚本修改得比较正常。

不过我比较知足。一方面用户接受了这个结果。另一方面,那个糟糕的脚本本来也是我写的……

原先的脚本之所以这么糟糕,主要原因是子查询太多。几乎每一个字段都有一个子查询语句。而且每个子查询都是先获取一个全集,然后从全集中去查所需要的数据。子查询只需要以一个子集为依据。

所以这次优化的策略是:先把最终需要的字段分成三组,对应的把全集拆分成三个子集。先从子集里查出所需的每组字段,然后再对三组字段进行连接。从子集里查出各组字段也不再使用子查询的方式,而是尽可能的使用连接。

其实就只做了这么一点事情。简单地说就是去掉了不必要的重复操作,以及缩小查询的起始范围。另外,作为个人的一点收获,对sql的一些语法也更熟悉了些。

贴一小段代码吧。觉得前后一样烂的兄弟们请轻拍,IT何苦为难IT。
这是优化前的:

 
  1. select u.userCode, 
  2.        u.userName, 
  3.        u.comCode, 
  4.        (select o.comcname 
  5.           from t_atip_organization o 
  6.          where o.comcode = u.comcode) as comName, 
  7.        ym.sjmc, 
  8.        -- 主審項目數 
  9.        (select count(distinct p.projectapprovalcode) 
  10.           from t_atip_projectapproval p, t_atip_prostatustrack ps 
  11.          where p.chiefaudit = u.usercode 
  12.            and p.projectlevel = '1' 
  13.            and p.projectyear = substr(ym.sjmc, 0, 4) 
  14.            and ps.projectapprovalcode = p.projectapprovalcode 
  15.            and ps.projectstutas > '04' 
  16.            and ps.seqno = 
  17.                (select max(seqno) 
  18.                   from t_atip_prostatustrack tempps 
  19.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  20.  
  21.            and ym.sjmc = 
  22.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  23.                   from t_atip_prostatustrack tempps 
  24.                  where tempps.projectapprovalcode = 
  25.                        substr(p.projectapprovalcode, 0, 21))) as chiefAuditCount, 
  26.        -- 主審項目中發現問題總數 
  27.        (select count(distinct(prob.seqno)) 
  28.           from t_atip_problem         prob, 
  29.                t_atip_projectapproval proj, 
  30.                t_atip_prostatustrack  ps 
  31.          where prob.programcode = proj.projectapprovalcode 
  32.            and proj.chiefaudit = u.usercode 
  33.            and prob.isrecall = '1' 
  34.            and proj.projectyear = substr(ym.sjmc, 0, 4) 
  35.            and ps.projectapprovalcode = proj.projectapprovalcode 
  36.            and ps.projectstutas > '04' 
  37.            and ps.seqno = 
  38.                (select max(seqno) 
  39.                   from t_atip_prostatustrack tempps 
  40.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  41.  
  42.            and ym.sjmc = 
  43.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  44.                   from t_atip_prostatustrack tempps 
  45.                  where tempps.projectapprovalcode = 
  46.                        substr(proj.projectapprovalcode, 0, 21))) as chiefProbelCount, 
  47.        -- 主審項目中發現的重大問題總數 
  48.        (select count(distinct(prob.seqno)) 
  49.           from t_atip_problem         prob, 
  50.                t_atip_projectapproval proj, 
  51.                t_atip_prostatustrack  ps 
  52.          where prob.programcode = proj.projectapprovalcode 
  53.            and prob.problemlevel in ('13''14'
  54.            and proj.chiefaudit = u.usercode 
  55.            and prob.isrecall = '1' 
  56.            and proj.projectyear = substr(ym.sjmc, 0, 4) 
  57.            and ps.projectapprovalcode = proj.projectapprovalcode 
  58.            and ps.projectstutas > '04' 
  59.            and ps.seqno = 
  60.                (select max(seqno) 
  61.                   from t_atip_prostatustrack tempps 
  62.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  63.  
  64.            and ym.sjmc = 
  65.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  66.                   from t_atip_prostatustrack tempps 
  67.                  where tempps.projectapprovalcode = 
  68.                        substr(proj.projectapprovalcode, 0, 21))) as chiefMainProbCount, 
  69.        -- 作為主審的被評分項目數 
  70.        (select count(distinct p.projectapprovalcode) 
  71.           from t_atip_projectevaluation eval, 
  72.                t_atip_projectapproval   p, 
  73.                t_atip_prostatustrack    ps 
  74.          where (eval.projectcode = p.projectapprovalcode or 
  75.                p.projectapprovalcode = 
  76.                substr(eval.projectcode, 0, length(eval.projectcode) - 3)) 
  77.            and p.chiefaudit = u.usercode 
  78.            and eval.usercode = u.usercode 
  79.            and p.projectlevel = '1' 
  80.            and p.projectyear = substr(ym.sjmc, 0, 4) 
  81.            and ps.projectapprovalcode = p.projectapprovalcode 
  82.            and ps.projectstutas > '04' 
  83.            and ps.seqno = 
  84.                (select max(seqno) 
  85.                   from t_atip_prostatustrack tempps 
  86.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  87.  
  88.            and ym.sjmc = 
  89.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  90.                   from t_atip_prostatustrack tempps 
  91.                  where tempps.projectapprovalcode = 
  92.                        substr(p.projectapprovalcode, 0, 21))) as chiefGradedProjectCount, 
  93.        --作為主審被評分的總分 
  94.        /*(select round(nvl(avg(sum(eval.score)), 0), 2) as avgscore 
  95.           from t_atip_projectevaluation eval, 
  96.                t_atip_projectapproval   p, 
  97.                t_atip_prostatustrack    ps 
  98.          where (eval.projectcode = p.projectapprovalcode or 
  99.                p.projectapprovalcode = 
  100.                substr(eval.projectcode, 0, length(eval.projectcode) - 3)) 
  101.            and p.chiefaudit = u.usercode 
  102.            and eval.usercode = u.usercode 
  103.            and p.projectlevel = '1' 
  104.            and p.projectyear = substr(ym.sjmc, 0, 4) 
  105.            and ps.projectapprovalcode = p.projectapprovalcode 
  106.            and ps.projectstutas > '04' 
  107.            and ps.seqno = 
  108.                (select max(seqno) 
  109.                   from t_atip_prostatustrack tempps 
  110.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  111.  
  112.            and ym.sjmc = 
  113.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  114.                   from t_atip_prostatustrack tempps 
  115.                  where tempps.projectapprovalcode = 
  116.                        substr(p.projectapprovalcode, 0, 21)) 
  117.          group by eval.projectcode, eval.evaluationusercode)*/ 
  118.          (SELECT SUM(ma.avgtotalscore) 
  119.           FROM (SELECT m.projectcode, 
  120.                        m.usercode, 
  121.                        AVG(projtotalscore) avgtotalscore 
  122.                   FROM (select substr(eval.projectcode, 0, 21) projectcode, 
  123.                                eval.usercode, 
  124.                                eval.evaluationusercode, 
  125.                                sum(nvl(eval.score,0)) as projtotalscore 
  126.                           from t_atip_projectevaluation eval 
  127.                          group by substr(eval.projectcode, 0, 21), 
  128.                                   eval.evaluationusercode, 
  129.                                   eval.usercode) m 
  130.                  GROUP BY m.projectcode, m.usercode) ma, 
  131.                t_atip_projectapproval p, 
  132.                t_atip_prostatustrack ps 
  133.          WHERE ma.projectcode = p.projectapprovalcode 
  134.            AND p.projectlevel = '1' 
  135.            AND p.projectyear = substr(ym.sjmc, 0, 4) 
  136.            AND ma.usercode = p.chiefaudit 
  137.            AND p.chiefaudit = u.usercode 
  138.            and ps.projectapprovalcode = p.projectapprovalcode 
  139.            and ps.projectstutas > '04' 
  140.            and ps.seqno = 
  141.                (select max(seqno) 
  142.                   from t_atip_prostatustrack tempps 
  143.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  144.  
  145.            and ym.sjmc = 
  146.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  147.                   from t_atip_prostatustrack tempps 
  148.                  where tempps.projectapprovalcode = 
  149.                        substr(p.projectapprovalcode, 0, 21)) 
  150.          GROUP BY ma.usercode) 
  151.           as chiefTotalGrade, 
  152.  
  153.        -- 作為主審被質檢打分的項目數 
  154.        (select count(distinct qual.projectcode) 
  155.           from t_atip_qualitytype     qual, 
  156.                t_atip_projectapproval proj, 
  157.                t_atip_prostatustrack  ps 
  158.          where qual.projectcode = proj.projectapprovalcode 
  159.            and proj.chiefaudit = u.usercode 
  160.            and proj.projectlevel = '1' 
  161.            and proj.projectyear = substr(ym.sjmc, 0, 4) 
  162.            and ps.projectapprovalcode = proj.projectapprovalcode 
  163.            and ps.projectstutas > '04' 
  164.            and ps.seqno = 
  165.                (select max(seqno) 
  166.                   from t_atip_prostatustrack tempps 
  167.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  168.  
  169.            and ym.sjmc = 
  170.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  171.                   from t_atip_prostatustrack tempps 
  172.                  where tempps.projectapprovalcode = 
  173.                        substr(proj.projectapprovalcode, 0, 21))) as chiefQualifiedProjectCount, 
  174.        --作為主審被質檢打分的總分 
  175.        (select nvl(sum(qual.score), 0) 
  176.           from t_atip_qualitytype     qual, 
  177.                t_atip_projectapproval proj, 
  178.                t_atip_prostatustrack  ps 
  179.          where qual.projectcode = proj.projectapprovalcode 
  180.            and proj.chiefaudit = u.usercode 
  181.            and proj.projectlevel = '1' 
  182.            and proj.projectyear = substr(ym.sjmc, 0, 4) 
  183.            and ps.projectapprovalcode = proj.projectapprovalcode 
  184.            and ps.projectstutas > '04' 
  185.            and ps.seqno = 
  186.                (select max(seqno) 
  187.                   from t_atip_prostatustrack tempps 
  188.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  189.  
  190.            and ym.sjmc = 
  191.                (select distinct to_char(max(updatedate), 'yyyy-MM'
  192.                   from t_atip_prostatustrack tempps 
  193.                  where tempps.projectapprovalcode = 
  194.                        substr(proj.projectapprovalcode, 0, 21))) as chiefTotalQualified 
  195.   from t_atip_user u, 
  196.        (select to_char(add_months(date '2003-12-01', 1 * rownum), 'yyyy-MM') sjmc 
  197.           from dual 
  198.          where 1 = 1 
  199.         connect by rownum < 
  200.                    (select months_between(trunc(sysdate, 'mm'), 
  201.                                           trunc(date '2003-12-01''mm')) 
  202.                       from dual) + 1) ym 
  203.  where u.validstatus = '1' 
  204.    and u.istemporary = '0' 



这是优化后的:

 
  1. select USERCODE, 
  2.        COMCODE, 
  3.        SJMC, 
  4.        sum(CHIEFAUDITCOUNT) as CHIEFAUDITCOUNT, 
  5.        sum(CHIEFEVECTIONCOUNT) as CHIEFEVECTIONCOUNT, 
  6.        sum(CHIEFTOTALQUALIFIED) as CHIEFTOTALQUALIFIED, 
  7.        sum(CHIEFQUALIFIEDPROJECTCOUNT) as CHIEFQUALIFIEDPROJECTCOUNT, 
  8.        sum(CHIEFTOTALGRADE) as CHIEFTOTALGRADE, 
  9.        sum(CHIEFGRADEDPROJECTCOUNT) as CHIEFGRADEDPROJECTCOUNT, 
  10.        sum(CHIEFMAINPROBCOUNT) as CHIEFMAINPROBCOUNT, 
  11.        sum(CHIEFPROBELCOUNT) as CHIEFPROBELCOUNT 
  12.   from ( 
  13.  
  14.         -- 只計算項目數和出差天數,其它全部置為0 
  15.         select u.userCode, 
  16.                 u.comCode, 
  17.                 (to_char(ps.updatedate, 'yyyy-MM')) as sjmc, 
  18.                 -- 主審項目數 
  19.                 count(proj.projectapprovalcode) as chiefAuditCount, 
  20.                 -- 主審出差天數 
  21.                 sum(proj.totalday) as chiefEvectionCount, 
  22.                 -- 作為主審被質檢打分的總分,暫時繞過 
  23.                 0 as chiefTotalQualified, 
  24.                 -- 作為主審被質檢打分的項目數 
  25.                 0 as chiefQualifiedProjectCount, 
  26.                 -- 主審被評分項目總分,暫時繞過吧…… 
  27.                 0 as chiefTotalGrade, 
  28.                 -- 主審被評分項目數 
  29.                 0 as chiefGradedProjectCount, 
  30.                 -- 主審項目中發現重大問題總數 
  31.                 0 as chiefMainProbCount, 
  32.                 --主審項目中發現問題總數 
  33.                 0 as chiefProbelCount 
  34.           from t_atip_user            u, 
  35.                 t_atip_prostatustrack  ps, 
  36.                 t_atip_projectapproval proj 
  37.          where ps.projectapprovalcode = proj.projectapprovalcode 
  38.            and ps.projectstutas > '04' 
  39.            and ps.seqno = 
  40.                (select max(seqno) 
  41.                   from t_atip_prostatustrack tempps 
  42.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  43.            and proj.projectyear = to_char(ps.updatedate, 'yyyy'
  44.            and proj.chiefaudit = u.usercode 
  45.            and proj.projectlevel = '1' 
  46.            and u.validstatus = '1' 
  47.            and u.istemporary = '0' 
  48.          group by u.usercode, u.comcode, to_char(ps.updatedate, 'yyyy-MM'
  49.  
  50.         union all 
  51.         -- 只計算主審項目中發現重大問題總數和發現問題總數,其它全部置為0 
  52.         select u.userCode, 
  53.                u.comCode, 
  54.                (to_char(ps.updatedate, 'yyyy-MM')) as sjmc, 
  55.                -- 主審項目數 
  56.                0 as chiefAuditCount, 
  57.                -- 主審出差天數 
  58.                0 as chiefEvectionCount, 
  59.                -- 作為主審被質檢打分的總分,暫時繞過 
  60.                0 as chiefTotalQualified, 
  61.                -- 作為主審被質檢打分的項目數 
  62.                0 as chiefQualifiedProjectCount, 
  63.                -- 主審被評分項目總分,暫時繞過吧…… 
  64.                0 as chiefTotalGrade, 
  65.                -- 主審被評分項目數 
  66.                0 as chiefGradedProjectCount, 
  67.                -- 主審項目中發現重大問題總數 
  68.                count(distinct mainprob.seqno) as chiefMainProbCount, 
  69.                --主審項目中發現問題總數 
  70.                count(distinct prob.seqno) as chiefProbelCount 
  71.           from t_atip_user            u, 
  72.                t_atip_prostatustrack  ps, 
  73.                t_atip_projectapproval proj 
  74.           left join t_atip_problem prob on prob.programcode = 
  75.                                            proj.projectapprovalcode 
  76.                                        and prob.isrecall = '1' 
  77.           left join t_atip_problem mainprob on mainprob.seqno = prob.seqno 
  78.                                            and mainprob.problemlevel in 
  79.                                                ('13''14'
  80.          where ps.projectapprovalcode = proj.projectapprovalcode 
  81.            and ps.projectstutas > '04' 
  82.            and ps.seqno = 
  83.                (select max(seqno) 
  84.                   from t_atip_prostatustrack tempps 
  85.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  86.            and proj.projectyear = to_char(ps.updatedate, 'yyyy'
  87.            and proj.chiefaudit = u.usercode 
  88.            and proj.projectlevel = '1' 
  89.            and u.validstatus = '1' 
  90.            and u.istemporary = '0' 
  91.          group by u.usercode, u.comcode, to_char(ps.updatedate, 'yyyy-MM'
  92.         union all 
  93.  
  94.         -- 只計算主審被評分項目總分和主審被評分項目數,其它全部置為0 
  95.         -- 主審被評分總分的計算過程比較複雜,這裡採用的仍是優化之前的語句 
  96.         select USERCODE, 
  97.                COMCODE, 
  98.                SJMC, 
  99.                CHIEFAUDITCOUNT, 
  100.                CHIEFEVECTIONCOUNT, 
  101.                CHIEFTOTALQUALIFIED, 
  102.                CHIEFQUALIFIEDPROJECTCOUNT, 
  103.                round(nvl(sum(CHIEFTOTALGRADE), 0), 2) as CHIEFTOTALGRADE, 
  104.                nvl(sum(CHIEFGRADEDPROJECTCOUNT), 0) as CHIEFGRADEDPROJECTCOUNT, 
  105.                CHIEFMAINPROBCOUNT, 
  106.                CHIEFPROBELCOUNT 
  107.           from (select u.userCode, 
  108.                        u.userName, 
  109.                        u.comCode, 
  110.                        o.comcname as comName, 
  111.                        (to_char(ps.updatedate, 'yyyy-MM')) as sjmc, 
  112.                        -- 主審出差天數 
  113.                        0 as chiefEvectionCount, 
  114.                        -- 作為主審被質檢打分的總分 
  115.                        0 as chiefTotalQualified, 
  116.                        -- 作為主審被質檢打分的項目數 
  117.                        0 as chiefQualifiedProjectCount, 
  118.                        -- 主審被評分項目總分 
  119.                        (SELECT SUM(ma.avgtotalscore) 
  120.                           FROM (SELECT m.projectcode, 
  121.                                        m.usercode, 
  122.                                        AVG(projtotalscore) avgtotalscore 
  123.                                   FROM (select substr(eval.projectcode, 0, 21) projectcode, 
  124.                                                eval.usercode, 
  125.                                                eval.evaluationusercode, 
  126.                                                sum(nvl(eval.score, 0)) as projtotalscore 
  127.                                           from t_atip_projectevaluation eval 
  128.                                          group by substr(eval.projectcode, 0, 21), 
  129.                                                   eval.evaluationusercode, 
  130.                                                   eval.usercode) m 
  131.                                  GROUP BY m.projectcode, m.usercode) ma 
  132.                          WHERE ma.projectcode = proj.projectapprovalcode 
  133.                            AND proj.projectlevel = '1' 
  134.                            AND proj.projectyear = 
  135.                                to_char(ps.updatedate, 'yyyy'
  136.                            AND ma.usercode = proj.chiefaudit 
  137.                            AND proj.chiefaudit = u.usercode 
  138.                            and ps.projectapprovalcode = 
  139.                                proj.projectapprovalcode 
  140.                            and ps.projectstutas > '04' 
  141.                            and ps.seqno = 
  142.                                (select max(seqno) 
  143.                                   from t_atip_prostatustrack tempps 
  144.                                  where tempps.projectapprovalcode = 
  145.                                        ps.projectapprovalcode) 
  146.                          GROUP BY ma.usercode) as chiefTotalGrade, 
  147.                        -- 主審被評分項目數 
  148.                        (select sum(count(distinct eval.projectcode)) 
  149.                           from t_atip_projectevaluation eval 
  150.                          where eval.projectcode = proj.projectapprovalcode 
  151.                            and eval.usercode = proj.chiefaudit 
  152.                          group by eval.projectcode) as chiefGradedProjectCount, 
  153.                        -- 主審項目中發現重大問題總數 
  154.                        0 as chiefMainProbCount, 
  155.                        --主審項目中發現問題總數 
  156.                        0 as chiefProbelCount, 
  157.                        -- 主審項目數 
  158.                        0 as chiefAuditCount 
  159.                   from t_atip_user            u, 
  160.                        t_atip_prostatustrack  ps, 
  161.                        t_atip_organization    o, 
  162.                        t_atip_projectapproval proj 
  163.                  where o.comcode = u.comcode 
  164.                    and ps.projectapprovalcode = proj.projectapprovalcode 
  165.                    and ps.projectstutas > '04' 
  166.                    and ps.seqno = (select max(seqno) 
  167.                                      from t_atip_prostatustrack tempps 
  168.                                     where tempps.projectapprovalcode = 
  169.                                           ps.projectapprovalcode) 
  170.                    and proj.projectyear = to_char(ps.updatedate, 'yyyy'
  171.                    and proj.chiefaudit = u.usercode 
  172.                    and proj.projectlevel = '1'
  173.          group by USERCODE, COMCODE, SJMC 
  174.         union all 
  175.         -- 只計算質檢項目總數和質檢總分,其它全部置為0 
  176.         select u.userCode, 
  177.                u.comCode, 
  178.                (to_char(ps.updatedate, 'yyyy-MM')) as sjmc, 
  179.                -- 主審項目數 
  180.                0 as chiefAuditCount, 
  181.                -- 主審出差天數 
  182.                0 as chiefEvectionCount, 
  183.                -- 作為主審被質檢打分的總分 
  184.                round(nvl(sum(qual.score), 0), 2) as chiefTotalQualified, 
  185.                -- 作為主審被質檢打分的項目數 
  186.                count(distinct qual.projectcode) as chiefQualifiedProjectCount, 
  187.                -- 主審被評分項目總分 
  188.                0 as chiefTotalGrade, 
  189.                -- 主審被評分項目數 
  190.                0 as chiefGradedProjectCount, 
  191.                -- 主審項目中發現重大問題總數 
  192.                0 as chiefMainProbCount, 
  193.                --主審項目中發現問題總數 
  194.                0 as chiefProbelCount 
  195.           from t_atip_user            u, 
  196.                t_atip_prostatustrack  ps, 
  197.                t_atip_projectapproval proj 
  198.           left join t_atip_qualitytype qual on qual.projectcode = 
  199.                                                proj.projectapprovalcode 
  200.          where ps.projectapprovalcode = proj.projectapprovalcode 
  201.            and ps.projectstutas > '04' 
  202.            and ps.seqno = 
  203.                (select max(seqno) 
  204.                   from t_atip_prostatustrack tempps 
  205.                  where tempps.projectapprovalcode = ps.projectapprovalcode) 
  206.            and proj.projectyear = to_char(ps.updatedate, 'yyyy'
  207.            and proj.chiefaudit = u.usercode 
  208.            and proj.projectlevel = '1' 
  209.            and u.validstatus = '1' 
  210.            and u.istemporary = '0' 
  211.          group by u.usercode, u.comcode, to_char(ps.updatedate, 'yyyy-MM')) 
  212.  group by USERCODE, COMCODE, SJMC 

 



本文转自 斯然在天边 51CTO博客,原文链接:http://blog.51cto.com/winters1224/1111822,如需转载请自行联系原作者

相关文章
|
1月前
|
SQL 缓存 Java
sql优化方法
sql优化方法
19 0
|
2月前
|
SQL 存储 关系型数据库
一文搞懂SQL优化——如何高效添加数据
**SQL优化关键点:** 1. **批量插入**提高效率,一次性建议不超过500条。 2. **手动事务**减少开销,多条插入语句用一个事务。 3. **主键顺序插入**避免页分裂,提升性能。 4. **使用`LOAD DATA INFILE`**大批量导入快速。 5. **避免主键乱序**,减少不必要的磁盘操作。 6. **选择合适主键类型**,避免UUID或长主键导致的性能问题。 7. **避免主键修改**,保持索引稳定。 这些技巧能优化数据库操作,提升系统性能。
287 4
一文搞懂SQL优化——如何高效添加数据
|
2月前
|
SQL 存储 关系型数据库
SQL优化之Explain详解(mysql)
`Explain`是MySQL中用于分析SQL查询执行计划的工具。它可以帮助我们了解MySQL如何执行SQL语句,包括如何使用索引、预计的行数以及查询的顺序。以下是`Explain`输出的关键列及其含义的简要摘要: 1. **id**:查询的序列号,表示查询中的子句层次,id越大优先级越高。 2. **select_type**:表示查询的类型,如SIMPLE(简单查询)、PRIMARY(主查询,多表查询中的第一个查询)、SUBQUERY(子查询)、DERIVED(派生表)或UNION(UNION操作的查询部分)。 3. **table**:查询涉及的表名,如果是子查询,可能显示为衍生表
33 0
|
1月前
|
SQL 关系型数据库 MySQL
项目中遇到一张900w的数据表把原先要花费17s执行的SQL优化到300ms经验加100哈哈哈
项目中遇到一张900w的数据表把原先要花费17s执行的SQL优化到300ms经验加100哈哈哈
25 1
|
7天前
|
SQL 存储 关系型数据库
【MySQL系列笔记】SQL优化
SQL优化是通过调整数据库查询、索引、表结构和配置参数等方式,提高SQL查询性能和效率的过程。它旨在减少查询执行时间、减少系统资源消耗,从而提升数据库系统整体性能。优化方法包括索引优化、查询重写、表分区、适当选择和调整数据库引擎等。
36 3
|
9天前
|
存储 SQL 缓存
30个业务场景的SQL优化
这些优化策略和示例可以帮助改善 `SQL` 查询的性能和效率。在实践中,需要综合考虑数据库设计、`SQL` 编写、服务器配置等多方面因素,选择合适的优化方法,并进行充分的测试和验证。以上 30 个经验是 V 哥在实际经验中总结的内容,当然,业务场景不同,具体的优化策略也会不同,按实际情况处理,这不就是程序员要做的事情么。
|
9天前
|
SQL 存储 算法
clickhouse SQL优化
clickhouse 是 OLAP 数据库,但其具有独特的索引设计,所以如果拿 MySQL 或者其他 RDB 的优化经验来优化 clickhouse 可能得不到很好的效果,所以特此单独整理一篇文档,用于有 SQL 优化需求的同学,本人接触 clickhouse 时间也不长,难免有不足的地方,如果大家发现错误,还请不吝指正。
|
12天前
|
SQL 关系型数据库 MySQL
【MySQL】SQL优化
【MySQL】SQL优化
|
13天前
|
SQL 存储 关系型数据库
MySQL SQL优化
MySQL SQL优化
16 0
|
14天前
|
SQL Java 关系型数据库
mybatis-plus启动时自动执行sql脚本
mybatis-plus启动时自动执行sql脚本
19 1