2012-01-18 72 views
0

我在Sql Server 2008中有表「TRANSACTION」。大約在1秒內插入了6條記錄。 (因爲它是財務交易表)因此,在1天內,插入了500.000條記錄。 表每週進行分區。SQL Server - 使用GROUP BY查詢大型表的性能

該表主要用於多種選擇(當然是NOLOCK),插入,更新操作。

您是否認爲在以下的查詢可能會減慢其他關鍵選擇,插入,更新操作在同一張表上?我認爲,即使下面的查詢持續時間過長,其他select查詢也不會減慢,因爲此查詢不鎖定表。但我無法確定,並向你問道。

請注意,選擇列表中的列不在表格中編制索引。

SET @END_DATE = GETDATE() 

SET @START_DATE = DATEADD(HOUR, -24, @END_DATE) 

SELECT Column1, Column2, Column3, Column4, COUNT(*) FROM [TRANSACTION] WITH(NOLOCK) 
WHERE TRANSACTION_DATE BETWEEN @START_DATE AND @END_DATE 
GROUP BY Column1, Column2, Column3, Column4 

回答

3

運行在服務器上的任何查詢將在你運行可以有正在執行的其他查詢的影響本質上任何使用CPU /內存/ IO,所以。

您肯定會從您自己的數據中讀取〜500k行,您可以計算出的行大小,甚至可以大致瞭解這些數據將存儲在多少頁上。您必須與查詢計劃進行交叉檢查,以確保至少不會執行完整的分區掃描,否則會將350萬行掃描到內存中。

這會讓你在SLA之外嗎?我們無法說明,只有您可以通過適當的負載測試來確定。

+0

該應用程序是合適的數據庫服務器上運行。所以沒有CPU或內存問題。我唯一不能確定的是,對於在同一張表上執行select,insert,update的其他查詢可能會發生什麼風險?任何dealocks或等待問題? – 2012-01-18 12:16:35

+0

NOLOCK發出1個鎖,Sch-s - Schema Stability - 只阻止DDL運行該表。檢查查詢計劃,不要低估對IO的影響,而不考慮CPU和內存 - IO往往是大多數系統中的瓶頸 – Andrew 2012-01-18 12:19:21

0

顯然它或多或少放慢了服務器上的所有操作。

當查詢持續時將鎖定的唯一查詢是針對您的表的模式更改查詢。

我個人電子書籍您在列列1,列2,欄3,Column4,TRANSACTION_DATE到分組運行速度更快,這樣創建索引:

CREATE INDEX iName on [TRANSACTION](Column1, Column2, Column3, Column4, Transaction_date)