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