Оптимизация выборки диапазона с помощью `BETWEEN`
/*до рефакторинга*/
EXPLAIN
SELECT *
FROM public.salesorder AS t1
WHERE EXTRACT(YEAR FROM orderdate) = 2006
AND EXTRACT(MONTH FROM orderdate) = 7
/*после рефакторинга*/
EXPLAIN
SELECT *
FROM public.salesorder AS t1
WHERE orderdate BETWEEN '2006-07-01 00:00:00'::TIMESTAMP
AND '2006-07-31 00:00:00'::TIMESTAMP
Оптимизация с помощью оператора `EXISTS`
/*до рефакторинга*/
EXPLAIN
SELECT COUNT(DISTINCT t1.orderid)
FROM public.salesorder AS t1
JOIN public.orderdetail AS t2
ON t1.orderid = t2.orderid
/*после рефакторинга*/
EXPLAIN
SELECT COUNT(DISTINCT t1.orderid)
FROM public.salesorder AS t1
WHERE EXISTS(
SELECT NULL
FROM public.orderdetail AS t2
WHERE t1.orderid = t2.orderid)
Более читабельные выражения
/*до рефакторинга*/
EXPLAIN
SELECT SUM(CASE WHEN num % 3 = 0 THEN 1 END) AS foo,
SUM(CASE WHEN num % 5 = 0 THEN 1 END) AS bar,
SUM(CASE WHEN num % 3 = 0 AND num % 5 = 0 THEN 1 END) AS foobar
FROM table1
/*после рефакторинга*/
EXPLAIN
SELECT COUNT(*) FILTER(WHERE num % 3 = 0) AS foo,
COUNT(*) FILTER(WHERE num % 5 = 0) AS bar,
COUNT(*) FILTER(WHERE num % 3 = 0 AND num % 5 = 0) AS foobar
FROM table1
Ставьте «
⌨️ Теги: #sql #between #distinct #запросы #database #базыданных #аналитика #maximdupley #maestro7it #quadd4rv1n7 #2025
Please open Telegram to view this post
VIEW IN TELEGRAM
Хабр
Оптимизация SQL запросов
Оптимизация SQL-запросов является одной из ключевых задач при работе с реляционными базами данных. Эффективные SQL-запросы позволяют значительно улучшить производительность приложений и обеспечить...
👍1