2012-01-10 4 views
6

Я хотел бы знать, каковы различия между использованием:разница между COUNT (*) и COUNT (имя_столбца)

SELECT email, COUNT(email) AS total 
FROM `newsletter` 
GROUP BY email having total>1 

или

SELECT count(*) as total, email 
FROM 'newsletter' 
GROUP BY email having total > 1 

Оба дают одинаковые результаты, но что еще рассчитывает count(*) чем электронные письма?

+0

См. Http://dba.stackexchange.com/q/2511/630 объясняет в связи со стандартом ANSI – gbn

+1

Возможный дубликат [В SQL, какая разница между count (column) и count (*)?] (http://stackoverflow.com/questions/59294/in-sql-whats-the-difference-between-countcolumn-and-count) и многие другие – gbn

ответ

5

Существует по крайней мере одно отличие.

  • Они могут возвращать разные результаты, если email может содержать NULL.

Для получения дополнительной информации см. this article.

+0

+1 fot ссылка, но почему вы думаете, что счет (электронная почта) не могут использовать индексы покрытия? – newtover

+0

@newtover: Я не знал об этом, но Питер так говорит, и он знает гораздо больше, чем я :-) –

+0

Питер говорит, что вам просто нужен еще один индекс для запроса, который он описывает, но это не так. для запроса OP. – newtover

2

COUNT (*) подсчитывает все строки WHEREAS COUNT (имя столбца) подсчитывает только значения, отличные от NULL.

1

SELECT COUNT(*) подсчитывает все строки

SELECT COUNT(email) подсчитывает все значения (ненулевых значений)

В вашем случае, если все строки содержат значения, оба результата могут быть одинаковыми. Но это может повлиять на производительность, но это зависит от таблицы volumne, двигателя хранения, индексов ...

2

count(*) позволяет базе данных использовать индекс для подсчета, чтобы он мог улучшить производительность. как вы сказали, результат тот же, в большинстве случаев, но:

  • count(column) подсчитывает только ненулевые-строки

так в colusion: если вам придется возиться с нуль-значений, используйте count(column), в противном случае используйте count(*) для лучшей производительности.

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