Читая некоторую документацию по настройке SQL, я нашел это:
SELECT COUNT(*)
:
- Подсчитывает количество строк.
- Часто неправильно используется для проверки существования записи.
Это SELECT COUNT(*)
действительно так плохо?
Как правильно проверить наличие записи?
sql
optimization
query-optimization
systempuntoout
источник
источник
Я бы предпочел вообще не использовать функцию Count:
Например, если вы хотите проверить, существует ли пользователь, прежде чем вставить его в базу данных, запрос может выглядеть следующим образом:
источник
Ты можешь использовать:
Если нет записи, соответствующей условию, результирующий набор записей будет пустым.
источник
Другие ответы довольно хороши, но было бы также полезно добавить
LIMIT 1
(или эквивалентный , чтобы предотвратить проверку ненужных строк.источник
будет проходить через все записи. Это причина, по которой его нельзя использовать для существования записи.
я хотел бы использовать
Найдя 1 запись, он завершит цикл.
источник
SELECT TOP 1
если он действительно прекратит работу после нахождения одного из них, или он продолжит находить все, чтобы сказать, какой из них ТОП?IF EXISTS (SELECT TOP 1 1 FROM ... WHERE ..)
Ты можешь использовать:
или
Это будет более эффективно, чем
SELECT *
если вы просто выбираете значение 1 для каждой строки, а не для всех полей.Существует также небольшая разница между COUNT (*) и COUNT (имя столбца):
COUNT(*)
будет считать все строки, включая нулиCOUNT(column name)
будет считать только ненулевые вхождения имени столбцаисточник
count(1)
иcount(*)
будет отличаться только в самых мертвых СУБД.count(*)
иcount(1)
. Так ли это для других СУБД », я не могу сказать.Ты можешь использовать:
Используйте
select 1
для предотвращения проверки ненужных полей.Используйте
LIMIT 1
для предотвращения проверки ненужных строк.источник
Я использую этот способ:
источник
Другой вариант:
источник