3

我想从超过 100 000 条记录的 sql server 表中获取记录数,我正在使用该Count(Id)方法,但需要很多时间(大约 7 到 8 秒),有什么方法可以让它更快,知道我在我的Select

SELECT Count(StudentID) WHERE Type = 1 AND Name Like %Sid%

我发现我们可以使用下面的方法

SELECT rows FROM sysindexes 
WHERE id = OBJECT_ID('dbo.StudentID') AND indid < 2

但不幸的是,我不能在其中添加我的 WHERE 子句。有办法吗?

类型字段的我的索引定义:(非唯一,非集群)

4

2 回答 2

2

根据条件获取计数的最有效方法是使用COUNT().

如果您有一个有效的索引Type(这意味着它是索引的第一列),最好计算那个字段,或者*数据库不需要获取StudentID来计算它。换句话说;

SELECT COUNT(Type) FROM Students WHERE Type=1

或者

SELECT COUNT(*) FROM Students WHERE Type=1

请注意,这将稍微改变查询的含义,如果 StudentID 可以为 null,则该行之前不会被计算,但现在会。

于 2013-07-26T17:41:03.597 回答
1

请注意,这sysindexes.rows不一定会提供确切的答案,并且正如您所提到的,您不能过滤到记录的子集。

如果您需要知道确切的记录数,则必须使用COUNT(*)or COUNT(<column_name>)(取决于您是否希望 NULLS 计数)。

在您的情况下,如果您有一个将该列Type作为其第一列的索引,则查询优化器应该使用该索引来自动加快计数。

于 2013-07-26T17:35:22.553 回答