<form id="hz9zz"></form>
  • <form id="hz9zz"></form>

      <nobr id="hz9zz"></nobr>

      <form id="hz9zz"></form>

    1. 明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

      SQL優化:很容易的一篇提高SQL性能的文章!

      [摘要]在sql查詢中為了提高查詢效率,我們常常會采取一些措施對查詢語句進行sql優化,下面總結的一些方法,有需要的可以參考參考。在某運營商的優化經歷中曾經遇到了一條比較有意思的 SQL,具體如下:1 該最...
      在sql查詢中為了提高查詢效率,我們常常會采取一些措施對查詢語句進行sql優化,下面總結的一些方法,有需要的可以參考參考。在某運營商的優化經歷中曾經遇到了一條比較有意思的 SQL,具體如下:

      1 該最開始的 sql 執行情況如下

      SQL> SELECT
        2    NVL(T.RELA_OFFER_SPEC_ID, SUBOS.SUB_OFFER_SPEC_ID) "offerSpecId"
        3    FROM OFFER_SPEC_RELA T
        4    LEFT JOIN OFFER_SPEC_GRP_RELA SUBOS
        5    ON T.RELA_GRP_ID     = SUBOS.OFFER_SPEC_GRP_ID
        6    AND subos.start_dt  <= SYSDATE
        7    AND subos.end_dt    >= SYSDATE
        8    WHERE T.RELA_TYPE_CD = 2
        9    AND t.start_dt      <= SYSDATE
       10    AND t.end_dt        >= SYSDATE
       11    AND (T.OFFER_SPEC_ID = 109910000618
       12    OR EXISTS
       13      (SELECT A.OFFER_SPEC_GRP_ID
       14      FROM OFFER_SPEC_GRP_RELA A
       15      WHERE A.SUB_OFFER_SPEC_ID = 109910000618
       16      AND T.OFFER_SPEC_GRP_ID   = A.OFFER_SPEC_GRP_ID
       17      ))
       18    AND rownum<500;
      
      no rows selected
       
      Execution Plan
      ----------------------------------------------------------
      Plan hash value: 1350156609

      image

      Predicate Information (identified by operation id):
      ---------------------------------------------------
         1 - filter(ROWNUM<500)
         2 - filter("T"."OFFER_SPEC_ID"=109910000618 OR  EXISTS (SELECT 0 FROM
                    "SPEC"."OFFER_SPEC_GRP_RELA" "A" WHERE "A"."OFFER_SPEC_GRP_ID"=:B1 AND
                    "A"."SUB_OFFER_SPEC_ID"=109910000618))
         3 - access("T"."RELA_GRP_ID"="SUBOS"."OFFER_SPEC_GRP_ID"(+))
         4 - filter("T"."RELA_TYPE_CD"=2 AND "T"."END_DT">=SYSDATE@! AND
                    "T"."START_DT"<=SYSDATE@!)
         5 - filter("SUBOS"."END_DT"(+)>=SYSDATE@! AND "SUBOS"."START_DT"(+)<=SYSDATE@!)
         6 - access("A"."SUB_OFFER_SPEC_ID"=109910000618 AND "A"."OFFER_SPEC_GRP_ID"=:B1)
       
      Statistics
      ----------------------------------------------------------
                0  recursive calls
                0  db block gets
            12444  consistent gets
                0  physical reads
                0  redo size
              339  bytes sent via SQL*Net to client
              509  bytes received via SQL*Net from client
                1  SQL*Net roundtrips to/from client
                0  sorts (memory)
                0  sorts (disk)
                0  rows processed
       
                        PLAN                     GET     DISK    WRITE              ROWS      ROWS USER_IO(MS)  ELA(MS)  CPU(MS) CLUSTER(MS)    PLSQL
      END_TI I    HASH VALUE EXEC           PRE EXEC PRE EXEC PER EXEC ROW_P    PRE EXEC PRE FETCH    PER EXEC PRE EXEC PRE EXEC    PER EXEC PER EXEC

      image

      2 第一次分析
      此時應該有以下個地方值得注意
      1) 該 sql 每天執行上千次,平均每次執行返回不到 10 行數據,但是平均邏輯讀達到1.2W,可能存在性能問題。
      2)ID 為 4,5 的執行計劃路徑中出現了兩個全表掃描,看到這兒我們可以想到可能是沒有合適的索引導致走了全表掃描從而執行效率低下。
      3)ID 為 2 的執行計劃路徑出現了 FILTER,且 3,和 6 為其子路徑,如果FILTER有兩個及兩個以上的子路徑,那么他的執行原理將類似于嵌套循環,id 號最小的子路徑如果返回行數較多,可能會導致多次執行id號更小的子路徑,導致性能低下。一般存在 “OR EXISTS” 的時候會出現此情況,可以根據情況避免。

      相關鏈接:

      PHP-FPM實現性能優化,php-fpm性能優化

      【SQL】MySQL性能優化_MySQL

      MySQL優化視頻教程

      以上就是SQL優化:很簡單的一篇提高SQL性能的文章!的詳細內容,更多請關注php中文網其它相關文章!


      學習教程快速掌握從入門到精通的SQL知識。




      日韩精品一区二区三区高清