2009-11-17 19 views
11

У меня есть два варианта при написании инструкции SQL с помощью функции COUNT.Выполнение функции COUNT SQL

  1. SELECT COUNT(*) FROM <table_name>
  2. SELECT COUNT(some_column_name) FROM <table_name>

С точки зрения производительности, что является лучшим SQL заявление? Могу ли я получить некоторое увеличение производительности с помощью опции 1?

+0

SQL Server? MySQL? – gbn

+0

Я использую MS SQL Server 2005 –

ответ

20

Performance не имеет значения, потому что они делают 2 различных агрегатов

  • COUNT(*) это все строки, включая значения NULL
  • COUNT(some_column_name), исключает NULL в «some_column_name»

Смотрите «Count(*) vs Count(1)» вопрос более

+2

они не отличаются в случае первичных ключей или не имеют нулевых столбцов. – Borys

+0

@Borys: Вы получите тот же счет. Но первичный ключ будет иметь индекс = лучше. Столбец «не нулевой столбец» может не совпадать. Конечно, это может быть неважно, но обычно это будет – gbn

2

Нет, в Sql Server нет увеличения производительности.

4

Вариант 2 фактически считает все поля, где some_column_name не имеет значения. Параметр 1 подсчитывает все поля, в которых любое поле не равно нулю. Таким образом, вы можете получить разные результаты из этих двух запросов. Большую часть времени вы на самом деле хотите, чтобы сосчитать все строки, а затем самый быстрый вариант, который не проверяет для любого из полей, просто SELECT COUNT(1) FROM ...

+1

См. Это для COUNT (*) vs COUNT (1) http://stackoverflow.com/questions/1221559/ – gbn

+0

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

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