2013-07-26 60 views
3

我想從包含超過100 000條記錄的sql server表中獲取記錄數,我使用Count(Id)方法,但它需要很長時間(約7至8個secondes),有沒有什麼辦法,使其更快,知道我是在使用WHERE子句我Select以最優化的方式從sql server表中獲取記錄數

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

我發現,我們可以使用下面的方法

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

但不幸的是,我不能添加我的WHERE子句。有沒有做到這一點?

我的索引定義的類型字段:(非唯一的非集羣)

+3

是'Type'索引? –

+0

是的,它被編入索引 – SidAhmed

+2

@SidAhmed你可以將該索引定義添加到問題中嗎? –

回答

1

注意sysindexes.rows不一定會提供一個確切的答案,正如你提到的,你不能過濾的一個子集記錄。

如果您需要知道確切的記錄數,您必須使用COUNT(*)COUNT(<column_name>)(取決於您是否要NULLS計數)。

對於您的情況,如果您的索引中第Type列作爲其第一列,查詢優化器應該使用該索引自動加速計數。

2

用條件計算最有效的方法是使用COUNT()

如果你有Type有效的索引(這意味着,這是一個索引的第一列),最好是數着非常字段或*使數據庫並不需要獲取StudentID來算吧。換一種說法;

SELECT COUNT(Type) FROM Students WHERE Type=1 

SELECT COUNT(*) FROM Students WHERE Type=1 

注意這將改變查詢的意思咯,如果StudentID可以爲null,該行就不會被計入之前,但現在會。

相關問題