以最优化的方式从sql server表获取记录数

时间:2013-07-26 17:29:02

标签: sql sql-server performance optimization count

我想从具有超过100 000条记录的sql server表中获取记录数,我使用的是Count(Id)方法,但需要花费很多时间(大约7到8个secondes),知道我在Select

中使用了where子句,有什么方法可以让它更快
SELECT Count(StudentID) WHERE Type = 1 AND Name Like %Sid%

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

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

但遗憾的是我无法将WHERE子句添加到此。有没有去做?

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

2 个答案:

答案 0 :(得分:2)

使用COUNT()

计算条件的最有效方法

如果Type上有一个有效的索引(也就是说,它是索引的第一列),最好计算那个字段或*,以便数据库不需要获取StudentID来统计它。换句话说;

SELECT COUNT(Type) FROM Students WHERE Type=1

SELECT COUNT(*) FROM Students WHERE Type=1

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

答案 1 :(得分:1)

请注意,sysindexes.rows不一定会提供准确的答案,如您所述,您无法过滤到记录的子集。

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

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

相关问题