Продолжаю пост про best practices по написанию sql кода (+ собрала в единый файл основные принципы)
📌1. Прописывайте inner/cross join в явном виде
Плохо
select a, b from empl, depart
Хорошо
SELECT a, b FROM empl
CROSS JOIN depart
📌2. Старайтесь не использовать типы данных REAL и FLOAT. В SQL имеются гибкие типы данных NUMERIC и DECIMAL, лишенные ошибок округления, присущих числам с плавающей точкой.
📌3. Избегайте лишних скобок.
📌4. Ищите наиболее компактную форму.
- Используйте предикаты BETWEEN, а не AND
- Используйте предикаты IN(), а не OR. НО! будьте аккуратны с null-значениями.
📌5. Избегайте union.
UNION очень плохо поддается оптимизации, поскольку в них требуется отбрасывать избыточные дубликаты, они заставляют большинство ядер SQL производить сортировку, прежде чем представить результаты пользователю. Лучше заменить на union all.
📌6. Указывайте из какой таблицы вы берет поле в явном виде.
Если у вас джоин для нескольких таблиц, то пропишите для удобства откуда именно тянется ваша колонка. Но не перебарщивайте: для простого селекта такое делать не нужно.
Плохо
SELECT
companies.id,
companies.name
FROM companies
Хорошо
SELECT
users.email,
sum(charges.amount) as total_revenue
FROM users
INNER JOIN charges ON users.id = charges.user_id
📌7. Всегда переименовывайте свои агрегирующие функции.
Плохо
SELECT
count(*)
FROM users
Хорошо
SELECT
count(*) as total_users
FROM users
📌8. Разделяйте case/when statements.
Каждый when должен быть на отдельной строке и ниже по уровню, чем case.
Хорошо
CASE
WHEN event_name = 'viewed_homepage' THEN 'Homepage'
ELSE 'Other'
END
📌9. Используйте WHERE 1=1.
Такая конструкция, как WHERE 1=1 в SQL, облегчает добавление дополнительных условий с помощью AND.
Если вас увлекла эта тема, то советую прочитать книгу SQL Programming Style - Joe Celko:
https://doc.lagout.org/programmation/Databases/mssql/SQL%20Programming%20Style%20-%20Apr%202005.pdf
#трудовыебудни