好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > 自增長鍵列統(tǒng)計信息的處理方法

自增長鍵列統(tǒng)計信息的處理方法

熱門標(biāo)簽:電銷機器人被曝光 怎樣把地圖標(biāo)注導(dǎo)入公司地址 地圖標(biāo)注一個圓圈怎么用 寧波人工外呼系統(tǒng)有效果嗎 真人語音電銷機器人 廣州人工電銷機器人費用 洛陽外呼系統(tǒng)平臺 如何在地圖標(biāo)注自己店鋪 400外呼系統(tǒng)合法

這篇文章通過文字代碼的形式講解了如何處理用自增長鍵列的統(tǒng)計信息。我們都知道,在SQL Server里每個統(tǒng)計信息對象都有關(guān)聯(lián)的直方圖。直方圖用多個步長描述指定列數(shù)據(jù)分布情況。在一個直方圖里,SQL Server最大支持200的步長,但當(dāng)你查詢的數(shù)據(jù)范圍在直方圖最后步長后,這是個問題。我們來看下面的代碼,重現(xiàn)這個情形:

 -- Create a simple orders table
 CREATE TABLE Orders
 (
  OrderDate DATE NOT NULL,
  Col2 INT NOT NULL,
  Col3 INT NOT NULL
 )
 GO
 
 -- Create a Non-Unique Clustered Index on the table
 CREATE CLUSTERED INDEX idx_CI ON Orders(OrderDate)
 GO
 
 -- Insert 31465 rows from the AdventureWorks2008r2 database
 INSERT INTO Orders (OrderDate, Col2, Col3) SELECT OrderDate, CustomerID, TerritoryID FROM AdventureWorks2008R2.Sales.SalesOrderHeader
 GO
 
 -- Rebuild the Clustered Index, so that we get fresh statistics.
 -- The last value in the Histogram is 2008-07-31.
 ALTER INDEX idx_CI ON Orders REBUILD
 GO
 
 -- Insert 200 additional rows *after* the last step in the Histogram
 INSERT INTO Orders (OrderDate, Col2, Col3)
 VALUES ('20100101', 1, 1)
 GO 200

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

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

SQL Server 2005 SP1- SQL Server 2012

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

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

復(fù)制代碼 代碼如下:

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

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

復(fù)制代碼 代碼如下:

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

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

 -- => 1st update the Statistics on the table with a FULLSCAN
  UPDATE STATISTICS Orders WITH FULLSCAN
  GO
  
  -- Insert 200 additional rows *after* the last step in the Histogram
  INSERT INTO Orders (OrderDate, Col2, Col3)
 VALUES ('20100201', 1, 1)
  GO 200
  
 -- => 2nd update the Statistics on the table with a FULLSCAN
 UPDATE STATISTICS Orders WITH FULLSCAN
 GO
 
 -- Insert 200 additional rows *after* the last step in the Histogram
 INSERT INTO Orders (OrderDate, Col2, Col3)
 VALUES ('20100301', 1, 1)
 GO 200
 
 -- => 3rd update the Statistics on the table with a FULLSCAN
 UPDATE STATISTICS Orders WITH FULLSCAN
 GO

然后,當(dāng)我們執(zhí)行DBCC SHOW_STATISTICS命令,你會看到SQL Server已講那列標(biāo)記為Ascending。

復(fù)制代碼 代碼如下:

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

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

-- 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 Orders
WHERE OrderDate = '20100401'
OPTION (RECOMPILE, QUERYTRACEON 2389)
GO

來看下現(xiàn)在的表密度:

復(fù)制代碼 代碼如下:

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

現(xiàn)在的表密度是0.0008873115,因此查詢優(yōu)化器的估計行數(shù)是28.4516:0.0008873115*(32265-200)。

這雖然不是最好的結(jié)果,但比估計行數(shù)1好很多!

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

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

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


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

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


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

希望對大家有所啟迪,謝謝。

您可能感興趣的文章:
  • 對有自增長字段的表導(dǎo)入數(shù)據(jù)注意事項
  • SQL Server設(shè)置主鍵自增長列(使用sql語句實現(xiàn))
  • oracle中的ID號實現(xiàn)自增長的方法
  • mysql修改自增長主鍵int類型為char類型示例
  • 實現(xiàn)oracle數(shù)據(jù)庫字段自增長(兩種方式)

標(biāo)簽:石家莊 珠海 咸寧 晉中 東營 煙臺 南昌 北海

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《自增長鍵列統(tǒng)計信息的處理方法》,本文關(guān)鍵詞  自,增長,鍵列,統(tǒng)計,信息,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《自增長鍵列統(tǒng)計信息的處理方法》相關(guān)的同類信息!
  • 本頁收集關(guān)于自增長鍵列統(tǒng)計信息的處理方法的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 在线www网资源| 无码少妇一级A片在线观看| 欧美精品毛片久久久久久久| 黄色一级视频在线播放| 国一国二国三国免费版| 欧美精品人人做人人爱视频色戒| 国产精品第128页| 男人天堂色男人| 秋霞理伦| 韩国日本理论片A片大全| 开化县| 极品丰满白嫩肥臀大乳美女| 韩国少妇厨房激情做爰电影观看| 小莹客厅激情38章至50章一区二区| 农村岳的手伸进了我的内裤| 男人把女人桶到喷白浆的视频| 在线黄色大片| 激情六月婷婷| 女同三级bd高清在线播放| 免费 成 人 黄 色 网 站欧美| 国产在线视频网址| 无码欧亚熟妇人妻Av在线| 山村共妻大炕乱P| 男女日批网站| 69国产成人综合久久精| 国产成人精品福利视频| 西西147裸体艺术大胆| 揉捏着巨大的乳球艳妇| 军人的粗大(h)拔不出来| japanese护士高潮HD| 国产成人AV无码一二三区| 91丨国产丨白带秘?| 噜噜噜噜噜在线观看视频| 污的软件| 亚洲欧洲国产成人综合在线| 亂伦小说合集小说| 欧美激情首页| 国精产品一品二品国精在线观看| chinese男男性恋黄网站| 学生双腿白浆抽搐高潮h珠内裤| 别揉我奶?啊?嗯高潮了|