Подтвердить что ты не робот

Mysql count vs mysql SELECT, какой из них быстрее?

Если я хочу проверить имя, я хочу посмотреть, сколько строк/имен существует в столбце "имя пользователя" в таблице users. Скажем, тысячи... сотни тысяч, я должен использовать:

  • count (имя),

  • count (*) или

  • SELECT username FROM пользователей, где username = 'name'

Какой из них более подходит? Или они дадут тот же результат в отношении скорости/реакции?

EDIT:

Спасибо, ребята, я нашел ответ, count() определенно быстрее

Правильно ли этот запрос

SELECT COUNT( username )
FROM users
WHERE `username` = 'tim' 
4b9b3361

Ответ 1

COUNT(*) и COUNT(Name) могут создавать разные значения. COUNT не будет включать значения NULL, поэтому, если есть имена экземпляров, равные NULL, они не будут считаться.

COUNT(*) также будет работать лучше, чем COUNT(Name). Указав COUNT(*), вы оставляете оптимизатора свободным использовать любой индекс, который он пожелает. Указав COUNT(Name), вы вынуждаете механизм запроса использовать таблицу или, по крайней мере, индекс, содержащий столбец NAME.

Ответ 2

COUNT (имя) или COUNT (*) будет несколько быстрее, потому что им не нужно возвращать много данных. (см. Andrew Shepherd ответ на семантическую разницу между этими двумя формами COUNT, а также COUNT()). Основное внимание уделяется "проверке имени", эти различия имеют мало общего со следующим трюком: вместо подсчета вы также можете использовать

SELECT username FROM users where username = 'name' LIMIT 1;

который будет иметь эффект проверки (существования) имени, но возвращается, как только на нем будет найдено.

Ответ 3

Count (*) будет быстрее, поскольку MySQL-движок может свободно выбирать индекс для подсчета.

Ответ 4

Оператор Select производит больше трафика, если есть много пользователей с одинаковым именем (много строк вместо одного).

Ответ 5

Попробуйте все три и используйте наилучшие преформы. Если они все преформируют вокруг, это пример и преждевременная оптимизация, и вы должны, вероятно, просто использовать то, что вам больше всего нравится, и затем подкорректировать его позже, если это необходимо. Если вы суеверны, вы также можете рассмотреть возможность использования count (1), который, как мне сказали, также может иметь преимущества производительности.

Я бы сказал, что вы должны использовать select top 1, но вы проверяете имя пользователя, которое, вероятно, является индексированным уникальным столбцом, поэтому теоретически подсчет должен быть сформован так же хорошо, учитывая, что может быть только один.