TGViewer
.NET Разработчик .NET Разработчик @netdeveloperdiary · 6.75K subscribers
Post #3111 2.3K
День 2591. #МоиИнструменты #PG
Инструменты Оптимизации Запросов в PostgreSQL. Часть 3


3. EverSQL (ИИ-оптимизатор Запросов)
Что даёт: автоматически переписывает запросы и даёт рекомендации по индексам с использованием ИИ.
Тип: Коммерческий + Бесплатный уровень.
Базы данных: MySQL, PostgreSQL, Aurora.
Зачем нужен: Многие инженеры знают, что запросы можно оптимизировать, но не знают, как. EverSQL использует ИИ для анализа запросов и предложения конкретных оптимизаций — часто находя улучшения, которые упускают из виду люди.
Как работает:
-- Ввод: Ваш медленный запрос
SELECT o.*, c.name, c.email, p.product_name
FROM orders o
JOIN customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id
WHERE o.order_date >= '2024-01-01'
AND c.country = 'US'
AND o.status = 'completed'
ORDER BY o.order_date DESC
LIMIT 100;
-- Время выполнения: 45 секунд

Анализ EverSQL:
1. Отсутствует индекс orders(order_date, status, customer_id);
2. Порядок JOIN не оптимальный (примените фильтры к customers перед join).
-- Запрос, переписанный EverSQL:
WITH us_customers AS (
SELECT id, name, email
FROM customers
WHERE country = 'US'
)
SELECT o.*, c.name, c.email, p.product_name
FROM orders o
JOIN us_customers c ON o.customer_id = c.id
JOIN products p ON o.product_id = p.id
WHERE o.order_date >= '2024-01-01'
AND o.status = 'completed'
ORDER BY o.order_date DESC
LIMIT 100;

Рекомендованные индексы:
CREATE INDEX idx_orders_opt ON orders(status, order_date DESC, customer_id, product_id);
CREATE INDEX idx_customers_country ON customers(country) INCLUDE (id, name, email);

Новое время выполнения: 1.2 секунды (быстрее в 37 раз).

Когда использовать
- Сложные запросы, которые вы не до конца понимаете;
- Устаревший SQL, который «просто работает», но медленно;
- Нужны рекомендации по индексам;
- Хотите изучить методы оптимизации (ИИ объясняет ход рассуждений).

Когда отказаться
- Простые запросы (ручная оптимизация быстрее);
- Неподдерживаемые БД;
- Нужна оптимизация в реальном времени (EverSQL интерактивный/пакетный).

Скрытая функция
Помимо переписывания запросов, EverSQL анализирует схемы таблиц.
Обнаруженные проблемы:
1. Таблица 'orders' имеет 47 столбцов (слишком широкая).
Предложение: разделить на таблицы orders + order_metadata.
2. Столбец 'customer_data' имеет тип JSON (не индексируемый).
Предложение: вынести часто запрашиваемые поля в столбцы.
3. Отсутствует секционирование по 'orders' (500 млн строк).
Предложение: секционирование по order_date (ежемесячно).

Это позволяет выявлять системные проблемы, которые не могут быть исправлены модификацией запросов.

С осторожностью
Предложения ИИ нуждаются в проверке:
EverSQL предложил оптимизацию
SELECT … FROM orders
WHERE order_date >= DATE_SUB(CURRENT_DATE, INTERVAL 30 DAY)

Выглядит хорошо, но…
- В нашем случае: 80% запросов используют order_date = CURRENT_DATE;
- Индекс по (order_date, …) лучше выражения (DATE_SUB(…));
Всегда проверяйте предложения на реальных шаблонах запросов. ИИ не знает вашего конкретного распределения рабочей нагрузки.

Источник: https://medium.com/@reliabledataengineering/15-sql-optimization-tools-that-make-queries-10x-faster-8629ac451d97
  • 👍 9
More from @netdeveloperdiary
  1. Sep 28, 2026День 2798. #Оффтоп Утиная Типизация в C# с Помощью Перехватчиков. Часть 2 Некоторое время…
  2. Sep 27, 2026День 2797. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Окончание Начало Продол…
  3. Sep 26, 2026День 2796. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Продолжение Начало Три…
  4. Sep 25, 2026День 2795. #ЗаметкиНаПолях #AI Рабочий процесс с Copilot для .NET. Начало Проблема с позиц…
  5. Sep 24, 2026День 2794. #Оффтоп #Здоровье Сегодня будет необычный пост. Завтра в Москве стартует конфер…
  6. Sep 23, 2026День 2793. #ЗаметкиНаПолях #SQL 10 Редких Возможностей SQL, Которые Стоит Знать Каждому. Ч…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →