A
Analytix & Chill
@analytixandchill872 подп.
1.8Kпросмотров
1 августа 2025 г.
Score: 2.0K
Оптимизация запросов Оптимизация запросов - одна из тем, которую любят обсуждать на техсобесах. Особенно полезно в ней разбираться новичкам, которые приходят в бигтехи и сталкиваются с таблицами на сотни миллионов, а то и миллиарды строк. Без этого даже простой запрос может превратиться в вечность. Оптимизация запросов в SQL - это процесс улучшения SQL-запросов и/или структуры базы данных с целью: 1. Ускорения выполнения запросов Чтобы не приходилось ждать их выполнения по нескольку минут или даже часов. 2. Снижения нагрузки на сервер Тяжёлые запросы могут замедлять работу базы данных для других пользователей и сервисов, что приводит к потере времени сотрудников, задержке принятия решений и, в конечном итоге, увеличению стоимости бизнес-процессов. 3. Сокращения потребления ресурсов Каждый запрос использует процессор, память и дисковую систему сервера — а значит, влияет на стоимость инфраструктуры (электричество, аренда серверов и т.д.). Рассмотрим чеклист ✅ по оптимизации SQL-запросов: 1. Максимум фильтров в блоке WHERE как можно раньше. Чем раньше отфильтруешь ненужные строки — тем меньше данных будет обрабатываться дальше. 2. Индексы и партиции — первым делом. В WHERE старайся фильтровать по колонкам, на которых есть индекс или которые участвуют в партиционировании таблицы. А уже потом по остальным. Часто партиции и индексы зарыты в колонках с датами, id стран и городов. 3. Не нужно SELECT Лучше явно указать только нужные колонки. 4. Ставь LIMIT 10, если просто смотришь данные Когда тестируешь запрос и просто хочешь увидеть пример вывода — не забывай про LIMIT 10. 5. Не сортируй и не ставь DISTINCT, если это не нужно ORDER BY, DISTINCT, GROUP BY — дорогие операции. Если они не нужны по логике — не используй. 6. IN — не всегда хорошо. Лучше JOIN, а ещё лучше — EXISTS Особенно если подзапрос возвращает много строк IN может тормозить. Пример: -- медленно SELECT FROM orders WHERE user_id IN (SELECT id FROM users WHERE active = true); -- быстрее SELECT o. FROM orders o JOIN users u ON o.user_id = u.id WHERE u.active = true; -- ещё лучше (в некоторых СУБД) SELECT FROM orders o WHERE EXISTS ( SELECT 1 FROM users u WHERE u.id = o.user_id AND u.active = true ); 7. Временные таблицы вместо CTE (WITH) Если CTE используется несколько раз — СУБД может пересчитывать его каждый раз. Сохрани результат один раз во временную таблицу и работай с ней. ⚠️ Но НЕ забудь важное правило: Запрос - это не только про скорость, но и про то, чтобы его понял другой человек (или ты сам через неделю). Слишком "оптимальный" код иногда хуже - потом никто не разберётся, что ты там делал. Не всегда надо выжимать максимум скорости. Главное - баланс между эффективностью и читаемостью. 👍 Понравился пост? Поддержи реакцией и перешли знакомым, которым он может быть полезен!
1.8K
просмотров
2825
символов
Нет
эмодзи
Нет
медиа

Другие посты @analytixandchill

Все посты канала →
Оптимизация запросов Оптимизация запросов - одна из тем, кот — @analytixandchill | PostSniper