0
我已經定義爲一個表如下:巨大的內存佔用2008
CREATE TABLE [dbo].[T](
[FileID] [bigint] NOT NULL,
[Line] [nvarchar](250) NULL
) ON [PRIMARY]
寫到FileID是一個外鍵,並且該表具有> 700萬條記錄
做一個SELECT COUNT (1)在該表上導致1.5GB +的內存尖峯。任何解決方法?
我已經定義爲一個表如下:巨大的內存佔用2008
CREATE TABLE [dbo].[T](
[FileID] [bigint] NOT NULL,
[Line] [nvarchar](250) NULL
) ON [PRIMARY]
寫到FileID是一個外鍵,並且該表具有> 700萬條記錄
做一個SELECT COUNT (1)在該表上導致1.5GB +的內存尖峯。任何解決方法?
如果你不需要,而你得到一個計數,以阻止所有用戶,並可以接受由於交易當前出現的微小差異,那麼這是好多了:
SELECT SUM([rows]) FROM sys.partitions
WHERE [object_id] = OBJECT_ID('dbo.T')
AND index_id IN (0,1);
否則,馬克是正確 - 在FileID
列上放置索引,SQL Server將選擇掃描該索引而不是掃描整個表。
這張桌子上真的沒有索引嗎?有幾個用例沒有聚合索引是有意義的,但我不認爲這是其中之一。雖然創建外鍵可以幫助優化器,但它不會創建索引(儘管這是一種常見的誤解)。
桌子上有任何指標嗎?如果不是,他們只能通過掃描整個表來獲得行數。把一個索引放在'FileID'上,我相信你的內存使用量會少得多(因爲現在,SQL Server可以掃描每個條目8個字節的索引來確定行數) –
添加一個索引使情況變得更好;現在它已經上漲了0.4GB。謝謝。 – mido