SQL оптимизация фильтрации: WHERE и EXISTS

Оптимизация фильтрации

Максимально используйте 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);