Максимально используйте WHERE и HAVING
Must Have
Чем раньше в запросе отфильтровать ненужные строки, тем меньше данных нужно обрабатывать на последующих этапах.
JOIN вместо подзапросов в WHERE и HAVING
Must Have
Подзапросы в WHERE
и HAVING
часто менее эффективны, чем эквивалентные JOIN.
Неоптимальный запрос:
SELECT product_name, price
FROM products
WHERE category_id IN (
SELECT category_id
FROM categories
WHERE category_name = 'Electronics'
);
Оптимальный запрос:
SELECT p.product_name, p.price
FROM products p
JOIN categories c ON p.category_id = c.category_id
WHERE c.category_name = 'Electronics';
EXISTS вместо IN для подзапросов
Must Have
Оператор EXISTS
часто работает быстрее, чем IN
с подзапросом, потому что EXISTS
останавливается, как только находит совпадение. О том, как работать с EXISTS
, предлагаем изучит самостоятельно:)
Менее эффективно:
SELECT * FROM customers
WHERE customer_id IN (SELECT customer_id FROM orders WHERE amount > 1000);
Более эффективно:
SELECT * FROM customers c
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.customer_id = c.customer_id AND amount > 1000);