0

我有一个定义如下的表:

CREATE TABLE [dbo].[T](
[FileID] [bigint] NOT NULL,
[Line] [nvarchar](250) NULL
) ON [PRIMARY]

FileID 是外键,表有 > 7,000,000 条记录

在这个表上执行 select count(1) 会导致 1.5GB+ 的内存峰值。有什么解决方法吗?

4

1 回答 1

2

如果您在计数时不需要阻止所有用户,并且可以接受由于当前发生的事务而产生的微小差异,那么这会好得多:

SELECT SUM([rows]) FROM sys.partitions
  WHERE [object_id] = OBJECT_ID('dbo.T')
  AND index_id IN (0,1);

否则 Marc 是对的 - 在列上放置一个索引FileID,SQL Server 将选择扫描该索引而不是扫描整个表。

这张表上真的没有索引吗?有一些没有聚集索引有意义的用例,但我不怀疑这是其中之一。虽然创建外键可以帮助优化器,但它不会创建索引(尽管这是一个常见的误解)。

于 2012-06-28T12:37:36.880 回答