在執行 SQL 時如果使用成本方式分析則所有的成本分析信息來源依靠于系統的統計分析表( DBA_TABLES 、 DBA_INDEXES 、 DBA_TAB_COLUMNS )數據,如果" name="description" />

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • 數據庫對象統計分析技術應用

    發表于:2007-05-25來源:作者:點擊數: 標簽:數據庫技術應用統計分析對象
    ORACLE MI LY: 宋體; mso-ascii-font-family: Times New Roman; mso-hansi-font-family: Times New Roman">在執行 SQL 時如果使用成本方式分析則所有的成本分析信息來源依靠于系統的統計分析表( DBA_TABLES 、 DBA_INDEXES 、 DBA_TAB_COLUMNS )數據,如果

    ORACLEMILY: 宋體; mso-ascii-font-family: "Times New Roman"; mso-hansi-font-family: "Times New Roman"">在執行SQL時如果使用成本方式分析則所有的成本分析信息來源依靠于系統的統計分析表(DBA_TABLES、DBA_INDEXES、DBA_TAB_COLUMNS)數據,如果說統計分析的數據是不準確的,那可能會使ORACLE分析出來的路徑執行性能極差,所以統計分析數據是影響ORACLE性能極重要的信息。

     

    統計分析主要包括產生表及索引的統計信息

    表的統計信息主要包括表的行數,每行的平均長度(字節),空閑塊,統計時間等信息

    索引的統計信息主要包括行數、層數、葉塊數、統計時間等信息。

    另外ORACLE還可以統計列及數據不對稱信息,9i還可以統計系統信息(CPU,I/O

     

    ORACLE執行成本分析時首先取出所應用表及索引的統計數據進行分析,其中數據行數是一個重要的參數,因為ORACLE在分析表大小時行數為主要參數,如果進行兩個表聯合時,ORACLE會通過分析表的大小,決定應用小表進行全表查詢,而大表執行聯合查詢,這種性能明顯高于先大表進行全表掃描。索引的統計信息對分析也產生比較大的影響,如ORACLE通過統計可以分析產生多個索引的優先級及索引的實用性來確定最優的索引策略。ORACLE還可以統計列及數據對稱信息以產生更精確的分析。如一個表有A字段的索引,其中A共有兩種值10,共10000條記錄,為0的記錄有10條,為1的記錄有9990條,這時如果沒有進行列數據不對稱的統計信息,那么ORACLEA=0A=1條件查詢都會進行索引,但實際應用對A=0的索引性能得到了很大的提高,而A=1的索引反而使性能下降。所以說索引特征值分析信息對應用索引產生重大影響,精確的信息使ORACLE不會使用不應該用的索引。

     

    實際分析

    zl_cbqczl_yhjbqk都沒有建立統計信息,執行如下兩個SQL ORACLE將產生不同的執行計劃。

    1   select * from dlyx.zl_cbqc b, dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

    執行計劃:

    SELECT STATEMENT, GOAL = CHOOSE                             

     NESTED LOOPS                            

      TABLE ACCESS FULL    DLYX     ZL_YHJBQK              

      TABLE ACCESS BY INDEX ROWID      DLYX     ZL_CBQC                   

       INDEX UNIQUE SCAN  DLYX     抄表區冊主鍵                    

     

    2  select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

    執行計劃:

    SELECT STATEMENT, GOAL = CHOOSE                             

     NESTED LOOPS                            

      TABLE ACCESS FULL    DLYX     ZL_CBQC                  

      TABLE ACCESS BY INDEX ROWID      DLYX     ZL_YHJBQK                

       INDEX RANGE SCAN    DLYX     區冊索引                    

     

     

    在對兩個表進行了統計分析后

    3         select * from dlyx.zl_yhjbqk a,dlyx.zl_cbqc b where a.qc_bh=b.qc_bh

    執行計劃:

    SELECT STATEMENT, GOAL = CHOOSE                159  72853     9689449

     HASH JOIN                159  72853     9689449

      TABLE ACCESS FULL      DLYX     ZL_CBQC      1     426  19596

      TABLE ACCESS FULL      DLYX     ZL_YHJBQK   157  72853     6338211

     

    4  select * from dlyx.zl_cbqc b,dlyx.zl_yhjbqk a where a.qc_bh=b.qc_bh

    執行計劃:

    SELECT STATEMENT, GOAL = CHOOSE                159  72853     9689449

     HASH JOIN                159  72853     9689449

      TABLE ACCESS FULL      DLYX     ZL_CBQC      1     426  19596

      TABLE ACCESS FULL      DLYX     ZL_YHJBQK   157  72853     6338211

     

    從以上測試可以明顯看出ORACLE的分析結果

    1SQL與第2SQL在沒有統計分析的信息下進行,ORACLE無法進行判斷,只能以規則方法進行分析,根據表的出現先后順序有明顯關系。

    3SQL與第4SQL在有統計分析的信息下進行,ORACLE分析與表的出現先后順序無關,因為它已經知道了表的數據量并且已經確定返回的數據量基本上是兩個表所有的數據,所以對表兩個表進行了HASH JOIN (同時取出兩個表的數據然后在內存中進行聯合產生返回結果)。

     

    相關技術

    analyze語句產生分析數據

    分析表:analyze table zl_yhjbqk estimate statistics sample 20 percent

    分析索引:analyze index用戶資料表主鍵compute statistics

    分析列:analyze table zl_yhjbqk compute statistics for columns hbs_bh

    分析索引列:analyze table zl_yhjbqk compute statistics for all indexed columns

    sys.dbms_utility包分析數據

           分析數據庫(包括所有的用戶對象和系統對象):analyze_database

           分析用戶所有的對象(包括用戶方案內的表、索引、簇):analyze_schema

    sys.dbms_stats包處理分析數據

           分析數據庫(包括所有的用戶對象和系統對象):gather_database_stats

           分析用戶所有的對象(包括表、索引、簇):gather_schema_stats

    分析表:gather_table_stats

    分析索引:gather_index_stats

    刪除數據庫統計信息:delete_database_stats

    刪除用戶方案統計信息:delete_schema_stats

    刪除表統計信息:delete_table_stats

    刪除索引統計信息:delete_index_stats

    刪除列統計信息:delete_column_stats

    設置表統計信息:set_table_stats

    設置索引統計信息:set_index_stats

    設置列統計信息:set_column_stats

     

    ORACLE推薦用戶采用sys.dbms_stats包體進行分析,因為在ORACLE9i及其以上的版本全面擴充的此包體的功能。sys.dbms_utility包體進行分析時會對所有的信息全部分析一遍,時間比較長,而在9isys.dbms_stats可以利用表修改監控技術來判斷需統計分析的表進行,節省了用戶的分析資源。

     

    備注:

           ORACLE在得到了表的統計分析數據后才會進行成本分析,否則采用規則分析。

           并不是所有的統計數據都會對ORACLE分析產生影響,有些統計數據ORACLE并不處理,只是提供給用戶一個參考信息,也可能在ORACLE以后的版本中利用這些信息進行分析。

           分析表的登錄用戶必須對表擁有訪問權限或具有DBAAnalyze any權限


    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>