Ответ
Для анализа и оптимизации SQL использую следующий стек инструментов:
1. EXPLAIN и ANALYZE — базовые инструменты:
-- PostgreSQL
EXPLAIN (ANALYZE, BUFFERS, VERBOSE)
SELECT * FROM orders WHERE user_id = 123;
-- Результат показывает:
-- - Seq Scan vs Index Scan
-- - Cost estimation
-- - Actual time
-- - Buffers used
2. Профилировщики СУБД:
- SQL Server Profiler и Extended Events
- MySQL Slow Query Log с
pt-query-digest - pg_stat_statements для PostgreSQL
3. Визуальные инструменты:
- JetBrains DataGrip — встроенный explain plan
- Azure Data Studio — query store для SQL Server
- pgAdmin — графический explain для PostgreSQL
4. Практические техники оптимизации:
-- 1. Добавление индексов на часто используемые предикаты
CREATE INDEX idx_orders_user_date
ON orders(user_id, order_date DESC)
INCLUDE (total_amount);
-- 2. Переписывание запросов
-- Вместо IN с подзапросом:
SELECT * FROM users WHERE id IN (SELECT user_id FROM orders);
-- Использовать JOIN:
SELECT DISTINCT u.* FROM users u
JOIN orders o ON u.id = o.user_id;
-- 3. Оптимизация оконных функций
-- Добавить PARTITION BY и ORDER BY в индексы
5. Мониторинг в production:
- Запросы с высоким
total_elapsed_time - Частые table/index scans
- Lock contention и deadlocks