none
AUTO_UPDATE_STATISTICS設定 "ON"沒有作用? RRS feed

  • 問題

  • 環境:
    SQL:SQL 2005 Stadard sp2
    OS :Win2003 Stardard

    DB:
    AUTO_CREATE_STATISTICS 設定 "ON"
    AUTO_UPDATE_STATISTICS 設定 "ON"
    UPDATE_STATISTICS_ASYNC 設定 "OFF"

    A資料表有55萬筆資料
    底下三種狀況
    insert 5000筆到A資料
    insert 10000筆到A資料
    insert 20000筆到A資料
    其統計時間都沒有變動(利用STATS_DATE可得知)
    也因此Query的時間,當篩選到這些insert的資料時,會變得很慢(大約1分多鐘)
    但只要手動更新統計,Query的時間瞬間就出來
    或是篩選非這些剛insert的資料時,也是瞬間就出來

    根據http://technet.microsoft.com/zh-tw/library/cc966419(en-us).aspx
    說明AUTO_UPDATE_STATISTICS 設定 "ON"之後
    異動超過20%,SQL 2005才會更新統計值
    但是我Insert都超過30%以上,但統計值仍是過時的...

    請問為什麼?

    另外
    我在SQL 2000 Stadard下
    同樣
    A資料表有55萬筆資料
    insert 5000筆到A資料
    並篩選到這些insert的資料時
    卻可以即時瞬間篩選出來
    其設定也是選擇自動統計更新

    其中這兩個資料表的欄位跟索引是一樣的
    此資料表只有一個複合索引
    其實其他資料表也是如此,統計值始終不會更新
    SQL Server 也重開好幾次了
    也重建索引好幾次了
    甚至自行建立統計值,也沒有作用
    請問如何解決此問題?

     

    select指令如下

    SELECT 'A'=CAST(A.A欄 AS CHAR(12)),
          'B'=CAST(A.B欄 AS CHAR(50)),
            'C'=CAST(A.C欄 AS CHAR(8)),
          'D'=CAST(A.D欄 AS CHAR(8)),
          'E'=CAST(A.E欄 AS CHAR(12)),
            'F'=CAST(A.F欄 AS CHAR(12))
      FROM TableA A LEFT JOIN TableB B
    ON A.A欄=B.A欄
    WHERE C欄 BETWEEN '20101206' AND '20101206' AND SUBSTRING(A.A欄,4,9) IN (SELECT SUBSTRING(A欄,4,9) FROM TableB 
    WHERE G欄 = 'XXXXXXXXX' GROUP BY A欄 ) ORDER BY 1,3,4

    2010年12月6日 上午 11:07

解答