EXISTS РАБОТАЕТ БЫСТРЕЕ COUNT SQL-совет: перестаньте считать всё через COUNT(*) Многие пишут так: SELECT COUNT(*) FROM orders WHERE user_id = 123; Что…
SQL-совет: перестаньте считать всё через COUNT(*)
Многие пишут так:
SELECT COUNT(*)
FROM orders
WHERE user_id = 123;
Чтобы проверить — есть ли записи.
Проблема:
COUNT(*) считает все строки, даже если нужна просто проверка существования.
На больших таблицах это лишняя нагрузка и медленный запрос.
Правильнее использовать EXISTS.
Почему это лучше:
- База останавливается на первой найденной строке
- Меньше чтения данных
- Быстрее на больших таблицах
- Использует индексы эффективнее
Пример:
-- Плохо
SELECT COUNT(*)
FROM orders
WHERE user_id = 123;
-- Хорошо
SELECT EXISTS (
SELECT 1
FROM orders
WHERE user_id = 123
);
-- Или в условии
SELECT *
FROM users u
WHERE EXISTS (
SELECT 1
FROM orders o
WHERE o.user_id = u.id
);