Подсчитать количество строк в таблице SQL Server (2005)? - PullRequest
0 голосов
/ 11 мая 2010

У меня есть простой вопрос с двумя вариантами, чтобы получить количество строк на сервере SQL (2005). Я использую VS 2005. Есть два варианта, чтобы получить счет:

SELECT id FROM Table1 WHERE dt >= startDt AND dt < endDt;;

Я получаю список идентификаторов из вышеупомянутого вызова в кеше, а затем получаю счет по List.Count. Другой вариант -

SELECT COUNT(*) FROM Table1 WHERE dt >= startDt AND dt < endDt;

Вышеуказанный вызов получит счет напрямую. Проблема в том, что у меня было несколько случаев исключений со вторым методом: тайм-аут. Я обнаружил, что таблица1 слишком велика с миллионами данных. Когда я использовал первый вариант, это было нормально.

Меня смущает тот факт, что Count () занимает больше времени, чем получение всех строк (это правда?). Не уверены, что вызов агрегации с Count () приведет к тому, что сервер SQL создаст временную таблицу или кэш на стороне сервера, и это приведет к снижению производительности, когда таблица слишком большая? Я не уверен, что это лучший способ получить счет?

Ответы [ 4 ]

1 голос
/ 11 мая 2010

Что происходит, когда вы делаете это

SELECT COUNT(id) FROM Table1 WHERE dt >= startDt AND dt < endDt;

просто помните, что COUNT (id) не считает NULLS, в то время как COUNT (*) делает

есть ли у вас индекс по столбцам в предложении WHERE?

1 голос
/ 11 мая 2010

Поместите индексы в поле dt и используйте COUNT(id) (предполагается, что id установлен как NOT NULL)

SELECT COUNT(id) FROM Table1 WHERE dt >= startDt AND dt < endDt;

Кроме того, COUNT(id) против COUNT(*) не должно иметь большого значения в вашем случае.

1 голос
/ 11 мая 2010

Вы должны добавить индекс к столбцу dt, тогда это должно быть очень быстро.

CREATE INDEX ix_Table1_dt ON Table1 (dt)

Создание индекса может занять много времени, если у вас много строк (и я предполагаю, что вы делаете).

0 голосов
/ 11 мая 2010

Как предлагает Марк, добавьте индекс, а затем используйте СЧЕТ (*). Вы передаете ОГРОМНОЕ количество данных в варианте 1, чтобы просто посчитать их, а затем выбросить.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...