GROUP BY вместо DISTINCT
Must Have
Оператор DISTINCT
часто используется для удаления дубликатов, но GROUP BY
может быть более эффективным, особенно когда нужно агрегировать данные.
Пример с DISTINCT:
SELECT DISTINCT customer_id, order_date
FROM orders;
Более эффективный вариант с GROUP BY:
SELECT customer_id, order_date
FROM orders
GROUP BY customer_id, order_date;
С GROUP BY
запрос будет лучше отрабатывать на больших объемах, а на маленьких разницы нет.
Если уверены, что дублей нет, не удаляйте дубликаты
Should Have
Если вы знаете, что в результате запроса не будет дубликатов (например, выбираете по первичному ключу), не используйте DISTINCT
или GROUP BY
- это только замедлит запрос.
Неоптимальный запрос:
SELECT DISTINCT product_id, product_name
FROM products
WHERE product_id = 123;
Оптимальный запрос:
SELECT product_id, product_name
FROM products
WHERE product_id = 123;
UNION ALL вместо UNION
Must Have
UNION
автоматически удаляет дубликаты, что требует дополнительных ресурсов. Если вы уверены, что дубликатов не будет или они допустимы, используйте UNION ALL
.
Неоптимальный запрос:
SELECT product_id FROM products_2022
UNION
SELECT product_id FROM products_2023;
Оптимальный запрос:
SELECT product_id FROM products_2022
UNION ALL
SELECT product_id FROM products_2023;
UNION ALL
может работать в несколько раз быстрее, так как не тратит ресурсы на поиск и удаление дубликатов.