亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > 綜合 > 正文

使用自增長鍵列值的統計信息

2024-07-21 02:46:21
字體:
來源:轉載
供稿:網友
使用自增長鍵列值的統計信息

今天的文章里我想談下SQL Server里非常普遍的問題:如何處理用自增長鍵列的統計信息。我們都知道,在SQL Server里每個統計信息對象都有關聯的直方圖。直方圖用多個步長描述指定列數據分布情況。在一個直方圖里,SQL Server最大支持200的步長,但當你查詢的數據范圍在直方圖最后步長后,這是個問題。我們來看下面的代碼,重現這個情形:

 1 -- Create a simple orders table 2 CREATE TABLE Orders 3 ( 4     OrderDate DATE NOT NULL, 5     Col2 INT NOT NULL, 6     Col3 INT NOT NULL 7 ) 8 GO 9 10 -- Create a Non-Unique Clustered Index on the table11 CREATE CLUSTERED INDEX idx_CI ON Orders(OrderDate)12 GO13 14 -- Insert 31465 rows from the AdventureWorks2008r2 database15 INSERT INTO Orders (OrderDate, Col2, Col3) SELECT OrderDate, CustomerID, TerritoryID FROM AdventureWorks2008R2.Sales.SalesOrderHeader16 GO17 18 -- Rebuild the Clustered Index, so that we get fresh statistics.19 -- The last value in the Histogram is 2008-07-31.20 ALTER INDEX idx_CI ON Orders REBUILD21 GO22 23 -- Insert 200 additional rows *after* the last step in the Histogram24 INSERT INTO Orders (OrderDate, Col2, Col3)25 VALUES ('20100101', 1, 1)26 GO 200

在索引重建后,我們再看下直方圖,我們發現最后步進的值是2008-07-31。

1 DBCC SHOW_STATISTICS('dbo.Orders', 'idx_CI') WITH HISTOGRAM

你已經看到,在最后步進到表里后,我們插入了200條額外記錄。這樣的話,直方圖并沒有真實反饋實際的數據分布情況,但SQL Server還是要進行基數計算。我們現在來看看在不同版本里SQL Server是如何處理這個問題的。

SQL Server 2005 SP1- SQL Server 2012

在SQL Server 2014之前,基數計算對此問題的處理非常簡單:SQL Server估計行數為1,你可以從下面的圖片里看到。

點擊工具欄的顯示包含實際的執行計劃,并執行如下查詢:

SELECT * FROM dbo.Orders WHERE OrderDate='2010-01-01'

自SQL Server 2005 SP1起,查詢優化器可以標記1列為自增長(Ascending)來克服剛才介紹的限制。如果你用自增長列值更新了統計信息對象3次,那列就會被標記為自增長列。為了看有沒有列標記為自增長,你可以使用跟蹤標記2388。當你啟用這個跟蹤標記,DBCCSHOW_STATISTICS的輸出就改變了,有額外列返回。

DBCC TRACEON(2388)DBCC SHOW_STATISTICS('dbo.Orders', 'idx_CI')

現在下面的代碼更新統計信息3次,每次用自增長鍵列值在我們聚集索引末尾插入行。

 1 -- => 1st update the Statistics on the table with a FULLSCAN 2 UPDATE STATISTICS Orders WITH FULLSCAN 3 GO 4  5 -- Insert 200 additional rows *after* the last step in the Histogram 6 INSERT INTO Orders (OrderDate, Col2, Col3) 7 VALUES ('20100201', 1, 1) 8 GO 200 9 10 -- => 2nd update the Statistics on the table with a FULLSCAN11 UPDATE STATISTICS Orders WITH FULLSCAN12 GO13 14 -- Insert 200 additional rows *after* the last step in the Histogram15 INSERT INTO Orders (OrderDate, Col2, Col3)16 VALUES ('20100301', 1, 1)17 GO 20018 19 -- => 3rd update the Statistics on the table with a FULLSCAN20 UPDATE STATISTICS Orders WITH FULLSCAN21 GO

然后,當我們執行DBCC SHOW_STATISTICS命令,你會看到SQL Server已講那列標記為Ascending。

DBCC TRACEON(2388)DBCC SHOW_STATISTICS('dbo.Orders', 'idx_CI')

現在當你再次執行查詢不是直方圖范圍的數據時,沒有任何改變。為了使用標記為自增長鍵列,你要啟用另外一個跟蹤標記-2389。如果你啟用這個跟蹤標記,查詢優化器就是密度向量(Density Vector)來進行基數計算。

-- Now we query the newly inserted range which is currently not PResent in the Histogram.-- With Trace Flag 2389, the Query Optimizer uses the Density Vector to make the Cardinality Estimation.SELECT * FROM OrdersWHERE OrderDate = '20100401'OPTION (RECOMPILE, QUERYTRACEON 2389)GO

來看下現在的表密度:

DBCC TRACEOFF(2388)DBCC SHOW_STATISTICS('dbo.Orders', 'idx_CI')

現在的表密度是0.0008873115,因此查詢優化器的估計行數是28.4516:0.0008873115*(32265-200)。

這雖然不是最好的結果,但比估計行數1好很多!

(這里有問題,我本地是SQL Server 2008r2,測試估計行數還是1,不知原因,望知道的朋友解釋下,多謝!

)

SQL Server 2014

在SQL Server 2014引入的一個新功能是新基數計算。新基數計算對于自增長鍵問題的處理非常簡單:默認不使用任何跟蹤標記,來使用統計信息對象的密度向量來進行基數計算。下面查詢啟用2312跟蹤標記的基數計算來運行同個查詢。

1 -- With the new Cardinality Estimator SQL Server estimates 28.4516 rows at the Clustered Index Seek Operator.2 SELECT * FROM Orders3 WHERE OrderDate = '20100401'4 OPTION (RECOMPILE, QUERYTRACEON 2312)5 GO

我們來看這里的基數計算,你會看到查詢優化器再次估計行數是28.4516,但這一次沒表上自增長。這是SQL Server 2014的自帶功能。

(SQL Server 2014測試失敗,估計行數也是1……)

小結

在這篇文章,我向你展示了SQL Server的查詢優化器如何處理自增長鍵問題。在SQL Server 2014之前,你需要啟用2389跟蹤標記來獲得更好的基數計算——這樣的話那列會標記為自增長(ascending)。SQL Server 2014,查詢優化器默認就使用密度向量來進行基數計算,這樣就方便很多。我希望你對此有所收獲,在SQL Server里如何處理自增長鍵列問題你會有更好的想法。

感謝關注!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
亚洲国产成人精品一区二区| 正在播放亚洲1区| 国产成人综合精品在线| 成人激情在线播放| 91啪国产在线| 成人免费视频在线观看超级碰| 亚洲香蕉在线观看| 亚洲国语精品自产拍在线观看| 国产精品视频播放| 亚洲欧美成人一区二区在线电影| 欧美激情二区三区| 日韩av第一页| 欧美性黄网官网| 久久久久国色av免费观看性色| 久久精品视频播放| 欧美交受高潮1| 国产丝袜一区二区三区免费视频| 视频在线一区二区| 欧美精品福利视频| 久久国产天堂福利天堂| 日韩欧美在线观看视频| 国产精品日韩电影| 91中文字幕一区| 欧美精品在线看| 中文字幕欧美日韩精品| 欧美一级bbbbb性bbbb喷潮片| 97超碰国产精品女人人人爽| 18一19gay欧美视频网站| 免费97视频在线精品国自产拍| 久久久久亚洲精品成人网小说| 国产精品高清在线观看| 日韩高清欧美高清| 国产成人一区二区三区| 亚洲第一男人天堂| 一本色道久久88综合亚洲精品ⅰ| 欧美性少妇18aaaa视频| 国产成+人+综合+亚洲欧洲| 欧美人交a欧美精品| 91亚洲国产成人久久精品网站| 国产成人拍精品视频午夜网站| 亚洲欧美日韩久久久久久| 久久久免费电影| 国产精品久久久一区| 国产日产久久高清欧美一区| 色在人av网站天堂精品| 97精品一区二区三区| 亚洲色图第一页| 日韩亚洲成人av在线| 欧美午夜www高清视频| 亚洲欧美一区二区三区四区| 亚洲最新av在线| 96国产粉嫩美女| 亚洲一区中文字幕在线观看| 成人激情视频免费在线| 国模精品系列视频| 国产亚洲精品91在线| 欧美日韩在线视频一区| 富二代精品短视频| 在线播放亚洲激情| 亚洲福利视频久久| 78m国产成人精品视频| 欧美大片在线看| 国产亚洲精品久久久久久牛牛| 亚洲一区二区久久久久久久| 在线观看国产精品淫| 欧美日韩国产精品一区二区不卡中文| 91精品国产精品| 在线播放日韩专区| 欧美国产日韩精品| 日韩中文字幕亚洲| 欧美贵妇videos办公室| 97精品欧美一区二区三区| 欧美日韩免费看| 亚洲视屏在线播放| 91成人国产在线观看| 日本精品久久久久影院| 欧美性极品xxxx娇小| 亚洲a级在线观看| 人人做人人澡人人爽欧美| 国产精品高精视频免费| 国内精品视频久久| 欧美激情乱人伦一区| 色视频www在线播放国产成人| 日韩欧美aⅴ综合网站发布| 国产精品户外野外| 欧美亚洲日本网站| 91精品视频免费看| 亚洲国产天堂久久国产91| 国产一区二区三区高清在线观看| 国产一区二区三区欧美| 尤物yw午夜国产精品视频明星| 国产在线观看不卡| 国产精品6699| 一区二区三区高清国产| 夜夜躁日日躁狠狠久久88av| 亚洲福利影片在线| 97免费在线视频| 欧美在线免费看| 欧美激情一区二区三级高清视频| 4388成人网| 欧美精品情趣视频| 欧美一级淫片videoshd| 亚洲第一天堂无码专区| 欧美国产日韩一区| 激情懂色av一区av二区av| 久久综合伊人77777尤物| 丝袜美腿亚洲一区二区| 97国产成人精品视频| 日韩av手机在线| 日韩av免费观影| 久久久久久久999精品视频| 欧美激情视频给我| 在线电影欧美日韩一区二区私密| 欧美国产高跟鞋裸体秀xxxhd| 欧洲亚洲在线视频| 亚洲xxxx做受欧美| 国产999精品久久久| 日本欧美中文字幕| 中文字幕亚洲欧美日韩2019| 青青久久aⅴ北条麻妃| 亚洲国产精品久久久久秋霞不卡| 国产美女精品免费电影| 亚洲第一区中文99精品| 欧美怡春院一区二区三区| 中文在线资源观看视频网站免费不卡| 久久视频中文字幕| 91美女片黄在线观看游戏| 欧美在线视频观看免费网站| 国产精品扒开腿爽爽爽视频| 亚洲综合中文字幕在线观看| 国产亚洲免费的视频看| 亚洲一区二区三区在线免费观看| 欧美日韩免费在线| 国产精品国产福利国产秒拍| 亚洲成人av片| 在线观看亚洲区| 色七七影院综合| 国产精品极品尤物在线观看| 精品国产自在精品国产浪潮| 久久天堂电影网| 91精品国产91久久久久福利| 亚洲一区二区在线播放| 日韩av不卡在线| 中文字幕精品www乱入免费视频| 国产精品999| 日韩一区二区久久久| 亚洲精品v欧美精品v日韩精品| 国内精品在线一区| 欧美激情亚洲综合一区| 人九九综合九九宗合| 欧美大片在线影院| 国产精品久久久久久久久久久久久久| 久久精品国产欧美激情| 亚洲欧美日本精品| 亚洲精品乱码久久久久久按摩观| www.欧美视频| 亚洲精品久久视频| 国产精品视频导航| 欧美国产日韩二区| 亚洲免费伊人电影在线观看av| 亚洲精品www久久久久久广东| 亚洲欧美国产一区二区三区| 97香蕉超级碰碰久久免费软件| 中文字幕一精品亚洲无线一区|