2013-07-26 6 views
3

Я хочу получить количество записей из таблицы sql server с более чем 100 000 записей, я использую метод Count(Id), но это занимает много времени (около 7 до 8 secondes), есть ли способ сделать это быстрее, зная, что я использую где положение в моем 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 может быть пустым, то строка не была бы подсчитаны и раньше, но теперь будет.

Смежные вопросы