SQL: порядок написания ≠ порядок обработки
Запрос начинается с
Понимание этой последовательности помогает разобраться, почему алиас из
Важно: это логический порядок, а физический план выполнения выбирает оптимизатор СУБД.
👉 @SQLPortal
Запрос начинается с
SELECT, но логически обрабатывается в другом порядке:FROM / JOIN → WHERE → GROUP BY → HAVING → SELECT → DISTINCT → ORDER BY → LIMITПонимание этой последовательности помогает разобраться, почему алиас из
SELECT обычно недоступен в WHERE, а фильтрация результатов агрегации выполняется через HAVING.Важно: это логический порядок, а физический план выполнения выбирает оптимизатор СУБД.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Чтобы запросы оставались быстрыми, понятными и справлялись с ростом объёма данных, нужны хорошие привычки при их написании.
Вот 15 принципов, которые стоит применять на практике:
1. Избегайте
2. Отфильтровывайте ненужные строки с помощью
3. Понимайте разницу между
4. Используйте CTE вместо громоздких подзапросов для улучшения читаемости.
5. Не маскируйте ошибки логики лишним
6. Используйте
7. Освойте оконные функции для сложных расчётов.
8. Согласовывайте типы данных, чтобы избежать неявных преобразований.
9. Сравнивайте планы для
10. Убирайте
11. Используйте
12. Учитывайте, что функции над индексированными столбцами могут мешать использованию обычного индекса.
13. Используйте
14. Изучайте план выполнения через
15. Проверяйте корректность на небольших наборах данных, а производительность — на объёмах, близких к реальным.
👉 @SQLPortal
Вот 15 принципов, которые стоит применять на практике:
1. Избегайте
SELECT *: выбирайте только нужные столбцы.2. Отфильтровывайте ненужные строки с помощью
WHERE.3. Понимайте разницу между
INNER JOIN и LEFT JOIN.4. Используйте CTE вместо громоздких подзапросов для улучшения читаемости.
5. Не маскируйте ошибки логики лишним
DISTINCT.6. Используйте
UNION ALL, если удалять дубликаты не требуется.7. Освойте оконные функции для сложных расчётов.
8. Согласовывайте типы данных, чтобы избежать неявных преобразований.
9. Сравнивайте планы для
EXISTS и IN: первый не всегда быстрее.10. Убирайте
ORDER BY, если сортировка не нужна.11. Используйте
CROSS JOIN только когда действительно нужно декартово произведение.12. Учитывайте, что функции над индексированными столбцами могут мешать использованию обычного индекса.
13. Используйте
CASE для понятной условной логики.14. Изучайте план выполнения через
EXPLAIN; помните, что EXPLAIN ANALYZE действительно выполняет запрос.15. Проверяйте корректность на небольших наборах данных, а производительность — на объёмах, близких к реальным.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Pandas: Python для повседневных задач аналитика 🐼
Загрузить файлы с неаккуратными данными, изучить их структуру, очистить столбцы, сгруппировать результаты и объединить наборы данных — всё это можно сделать с Pandas.
Библиотека помогает подготовить данные для отчётов и машинного обучения, а также получить первые аналитические выводы.
👉 @SQLPortal
Загрузить файлы с неаккуратными данными, изучить их структуру, очистить столбцы, сгруппировать результаты и объединить наборы данных — всё это можно сделать с Pandas.
Библиотека помогает подготовить данные для отчётов и машинного обучения, а также получить первые аналитические выводы.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3👍1
Команды SQL проще запомнить по назначению
• DDL — создание и изменение структуры БД:
• DML — добавление, изменение и удаление данных:
• DCL — управление правами доступа:
• TCL — управление транзакциями:
• DQL — получение данных:
В некоторых классификациях
👉 @SQLPortal
• DDL — создание и изменение структуры БД:
CREATE, ALTER, DROP.• DML — добавление, изменение и удаление данных:
INSERT, UPDATE, DELETE.• DCL — управление правами доступа:
GRANT, REVOKE.• TCL — управление транзакциями:
COMMIT, ROLLBACK, SAVEPOINT.• DQL — получение данных:
SELECT.В некоторых классификациях
SELECT относят к DML, не выделяя DQL отдельно.Please open Telegram to view this post
VIEW IN TELEGRAM
❤4
SQL помогает получить данные. Статистика — понять, что они означают
20 статистических понятий для работы с отчётами, метриками и аналитическими запросами.
👉 @SQLPortal
20 статистических понятий для работы с отчётами, метриками и аналитическими запросами.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤4🔥1
Быстрый SQL начинается с продуманных запросов
1. Выбирайте только нужные столбцы. Вместо
2. Создавайте подходящие индексы. Учитывайте столбцы, используемые в
3. Избегайте функций над индексируемыми столбцами в условиях. Вместо
4. Используйте
5. Ограничивайте выдачу через
6. Сравнивайте
7. Отсекайте ненужные строки через
8. Не используйте
9. Выбирайте
10. Анализируйте планы выполнения. Используйте
👉 @SQLPortal
1. Выбирайте только нужные столбцы. Вместо
SELECT * перечисляйте поля: это уменьшает объём передаваемых данных.2. Создавайте подходящие индексы. Учитывайте столбцы, используемые в
WHERE, JOIN и ORDER BY.3. Избегайте функций над индексируемыми столбцами в условиях. Вместо
YEAR(date) = 2024 используйте диапазон дат — он может позволить использовать обычный индекс.4. Используйте
EXISTS для проверки существования строк. Но не считайте его всегда быстрее IN: сравнивайте планы выполнения.5. Ограничивайте выдачу через
LIMIT или TOP. Это сокращает результат, но не обязательно объём работы базы данных.6. Сравнивайте
JOIN и подзапросы. Выбирайте вариант с нужной семантикой и лучшим планом: объединение не всегда быстрее и может размножать строки.7. Отсекайте ненужные строки через
WHERE. Чем меньше данных обрабатывается дальше, тем лучше; фактический порядок операций определяет оптимизатор.8. Не используйте
DISTINCT без необходимости. Удаление дубликатов требует ресурсов. Проверьте, не возникают ли они из-за ошибочного объединения.9. Выбирайте
UNION ALL, если удалять дубликаты не нужно. В отличие от UNION, он сохраняет все строки и не тратит ресурсы на устранение повторов.10. Анализируйте планы выполнения. Используйте
EXPLAIN и, где доступно, EXPLAIN ANALYZE, чтобы находить узкие места. Помните: EXPLAIN ANALYZE действительно выполняет запрос.Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Числовые функции SQL: от округления до итогов 🔢
Они помогают обрабатывать числа и выполнять вычисления:
•
•
•
•
•
Агрегатные функции обобщают данные:
👉 @SQLPortal
Они помогают обрабатывать числа и выполнять вычисления:
•
ROUND — округлить до нужного количества знаков.•
CEIL / CEILING и FLOOR — округлить вверх или вниз до целого.•
ABS — получить модуль числа.•
MOD или % — найти остаток от деления.•
POWER — возвести число в степень.Агрегатные функции обобщают данные:
AVG вычисляет среднее, SUM — сумму, MIN и MAX — минимальное и максимальное значения. Названия и синтаксис отдельных функций зависят от СУБД.Please open Telegram to view this post
VIEW IN TELEGRAM
👍2
Дубликаты в SQL: способ зависит от задачи
•
•
•
Убрать повторы из выдачи и удалить записи из таблицы — разные задачи. Перед
👉 @SQLPortal
•
DISTINCT убирает повторяющиеся сочетания выбранных столбцов из результата запроса.•
GROUP BY объединяет строки в группы и позволяет посчитать повторы через COUNT(*).•
ROW_NUMBER() нумерует строки внутри группы, чтобы выбрать, какую запись оставить.Убрать повторы из выдачи и удалить записи из таблицы — разные задачи. Перед
DELETE проверьте выборку удаляемых строк и сделайте резервную копию.Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Git пригодится и тем, кто пишет SQL
Храните запросы, миграции и схемы БД в репозитории: так проще отслеживать изменения, возвращаться к предыдущим версиям и обсуждать правки с командой.
В шпаргалке — базовые команды: создание репозитория, коммиты, ветки, слияние,
👉 @SQLPortal
Храните запросы, миграции и схемы БД в репозитории: так проще отслеживать изменения, возвращаться к предыдущим версиям и обсуждать правки с командой.
В шпаргалке — базовые команды: создание репозитория, коммиты, ветки, слияние,
stash и работа с удалённым репозиторием. Сохраните для работы над SQL-проектами.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤2
SQL проще изучать, если разделить его по задачам
• Определять структуру таблиц:
• Получать данные:
• Добавлять, изменять и удалять записи:
• Управлять доступом:
• Управлять транзакциями:
• Объединять таблицы:
Считать итоги:
Начните с конкретной задачи — так проще понять, какие конструкции нужны и как они работают вместе.
👉 @SQLPortal
• Определять структуру таблиц:
CREATE, ALTER, DROP.• Получать данные:
SELECT, WHERE, ORDER BY.• Добавлять, изменять и удалять записи:
INSERT, UPDATE, DELETE.• Управлять доступом:
GRANT, REVOKE.• Управлять транзакциями:
BEGIN, COMMIT, ROLLBACK.• Объединять таблицы:
JOIN.Считать итоги:
GROUP BY, COUNT, SUM, AVG, MIN, MAX.Начните с конкретной задачи — так проще понять, какие конструкции нужны и как они работают вместе.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Практические уроки для Backend, Data Engineering и DevOps
Площадка с пошаговыми туториалами и облачными окружениями. Изучаем теорию и сразу выполняем команды без настройки локальной среды. В каталоге PostgreSQL, Redis, Docker, Kubernetes, Airflow, Spark и ClickHouse.
https://prepare.sh/
👉 @SQLPortal
Площадка с пошаговыми туториалами и облачными окружениями. Изучаем теорию и сразу выполняем команды без настройки локальной среды. В каталоге PostgreSQL, Redis, Docker, Kubernetes, Airflow, Spark и ClickHouse.
https://prepare.sh/
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
Дождались! Ребята сделали крутейший канал про IT новой эпохи
Нейросети, ИИ-агенты, вайбкодинг, вайбхакинг и новые инструменты уже меняют привычный мир технологий.
Там разбирают эти изменения и другие интересные IT-темы на простых картинках и понятном языке, а еще делятся полезными ресурсами и свежими новостями
Подписывайтесь: @IT_Portal
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Масштабирование базы данных: 6 подходов, которые стоит знать
Рост данных и трафика требует разных решений. Прежде чем масштабировать базу, определите, что ограничивает производительность: CPU, память, диски, запросы или количество соединений.
• Вертикальное масштабирование — добавить серверу CPU, RAM и более быстрые диски.
• Реплики для чтения — распределить запросы на чтение между копиями базы, учитывая задержку репликации.
• Шардинг — распределить данные между несколькими узлами.
• Партиционирование — разделить большую таблицу на части, чтобы упростить обслуживание и ускорить подходящие запросы.
• Кэширование — сократить повторные обращения к базе.
• Пул соединений — переиспользовать подключения и ограничивать их количество.
У каждого подхода свои ограничения и цена сложности. Выбирайте по измерениям и характеру нагрузки. Сохраните шпаргалку для работы и подготовки к собеседованию по System Design.
👉 @SQLPortal
Рост данных и трафика требует разных решений. Прежде чем масштабировать базу, определите, что ограничивает производительность: CPU, память, диски, запросы или количество соединений.
• Вертикальное масштабирование — добавить серверу CPU, RAM и более быстрые диски.
• Реплики для чтения — распределить запросы на чтение между копиями базы, учитывая задержку репликации.
• Шардинг — распределить данные между несколькими узлами.
• Партиционирование — разделить большую таблицу на части, чтобы упростить обслуживание и ускорить подходящие запросы.
• Кэширование — сократить повторные обращения к базе.
• Пул соединений — переиспользовать подключения и ограничивать их количество.
У каждого подхода свои ограничения и цена сложности. Выбирайте по измерениям и характеру нагрузки. Сохраните шпаргалку для работы и подготовки к собеседованию по System Design.
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1