2013-07-12 3 views
0

Интересно, почему общая продолжительность выполнения count (*) меньше, чем count (primary_key) той же таблицы?Общая продолжительность выполнения двух методов подсчета

План запроса (используя анализ объяснений) показывает, что каждый раз, когда Postgresql выполняет Seq Scan вместо использования индексов? Почему это происходит? и почему индексы не используются в этом случае?

Отредактировано: count(1) не имеет значения.

ответ

0

Когда вы используете SELECT COUNT(*) или SELECT COUNT(), вы просто подсчитываете строки в таблице, игнорируя данные столбцов.

Когда вы используете SELECT COUNT(primary_key), столбец primary_key также должен быть извлечен из строки и - в зависимости от механизма SQL, я думаю - считаются только ненулевые значения.

+0

Да, я знаю разницу между этими двумя, но мой вопрос касался использования индексов. почему seq scan, если индексы могут использоваться здесь? – Borys

+0

Индексы полезны при поиске определенных строк. Вы считаете, все они имеют значение. Индексы ускоряют поиск. –

+0

Я не могу согласиться с вами, посмотрите здесь https://wiki.postgresql.org/wiki/Index-only_scans#Is_.22count.28.2A.29.22_much_faster_now.3F – Borys