我想从具有超过100 000条记录的sql server表中获取记录数,我使用的是Count(Id)
方法,但需要花费很多时间(大约7到8个secondes),知道我在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子句添加到此。有没有去做?
“类型”字段的“索引”定义:(非唯一,非群集)
答案 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
作为其第一列,则查询优化器应使用该索引自动加速计数。