В Postgres есть unlogged-таблицы: для них отключается Write-Ahead Logging (WAL). За счёт этого запись становится заметно быстрее, но очевидная цена — такие таблицы не реплицируются через WAL и после крэша/перезапуска их содержимое не восстанавливается (по сути, данные считаются временными). В некоторых сценариях этот размен реально оправдан.
👉 @SQLPortal
Please open Telegram to view this post
VIEW IN TELEGRAM
👍5
Please open Telegram to view this post
VIEW IN TELEGRAM
❤5🔥3
JSONB-колонки Postgres и TOAST: гайд по производительности
Postgres даёт огромный набор фич на уровне пользователя под кучу разных кейсов, а под капотом там довольно сложная абстракция.
Работа с API и массивами в типе
Но зачем вообще “нарезать” JSON-объект на строки и колонки, а потом собирать его обратно, чтобы отправить клиенту?
Ответ: эффективность. Postgres быстрее всего работает со строками и колонками, а когда ты прячешь структуру данных внутрь JSON, движку сложнее разогнаться на максимум, как он мог бы.
👉 @SQLPortal
Postgres даёт огромный набор фич на уровне пользователя под кучу разных кейсов, а под капотом там довольно сложная абстракция.
Работа с API и массивами в типе
jsonb в последнее время стала заметно популярнее, и хранить куски данных приложения в jsonb превратилось в распространённый паттерн.Но зачем вообще “нарезать” JSON-объект на строки и колонки, а потом собирать его обратно, чтобы отправить клиенту?
Ответ: эффективность. Postgres быстрее всего работает со строками и колонками, а когда ты прячешь структуру данных внутрь JSON, движку сложнее разогнаться на максимум, как он мог бы.
Please open Telegram to view this post
VIEW IN TELEGRAM
Snowflake
Postgres JSONB Columns and TOAST: A Performance Guide
Understand how Postgres handles variable-length JSONB data using The Oversize Attribute Storage Technique (TOAST). Explore techniques to avoid the TOAST tax and efficiently retrieve your data.
Проверенные каналы по безопасности, которые реально помогают расти.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍6
Краткая шпаргалка по SQL с примерами запросов
https://github.com/enochtangg/quick-SQL-cheatsheet
👉 @SQLPortal
https://github.com/enochtangg/quick-SQL-cheatsheet
Please open Telegram to view this post
VIEW IN TELEGRAM
GitHub
GitHub - enochtangg/quick-SQL-cheatsheet: A quick reminder of all SQL queries and examples on how to use them.
A quick reminder of all SQL queries and examples on how to use them. - GitHub - enochtangg/quick-SQL-cheatsheet: A quick reminder of all SQL queries and examples on how to use them.
👍2
Cтатья про ACID-свойства.
Не только теория, но и практическая реализация на PostgreSQL с примерами из реальной жизни.
Этот пост отлично зайдет новичкам, которые хотят начать разбираться в базах данных, и он же нужен как база перед моей серией про внутренности PostgreSQL.
👉 @SQLPortal
Не только теория, но и практическая реализация на PostgreSQL с примерами из реальной жизни.
Этот пост отлично зайдет новичкам, которые хотят начать разбираться в базах данных, и он же нужен как база перед моей серией про внутренности PostgreSQL.
Please open Telegram to view this post
VIEW IN TELEGRAM
Medium
ACID Properties Explained: A Complete Guide with PostgreSQL Implementation
ACID Properties for Beginners. Not only theory but also practicle implementation using PostgreSQL.
Поток данных в Postgres для чтения/записи:
Приложение --> (опционально) пулер --> отдельный backend/клиентское соединение --> shared buffers --> кэш ОС (page cache) --> физический диск.
При чтении к кэшу ОС или диску обращается только если нужных страниц нет в shared buffers.
👉 @SQLPortal
Приложение --> (опционально) пулер --> отдельный backend/клиентское соединение --> shared buffers --> кэш ОС (page cache) --> физический диск.
При чтении к кэшу ОС или диску обращается только если нужных страниц нет в shared buffers.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍1
This media is not supported in your browser
VIEW IN TELEGRAM
Open-source инструмент Text2SQL, который превращает запросы на естественном языке в SQL, используя понимание схемы на базе графа. Задавай вопросы к базе простым языком, а QueryWeaver сам сделает всю склейку и соберет нужный SQL.
https://github.com/FalkorDB/QueryWeaver
👉 @SQLPortal
https://github.com/FalkorDB/QueryWeaver
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
Не используй CASE в WHERE
Один из самых частых SQL анти-паттернов это пихать
Классический пример:
Работает, но часто убивает производительность, потому что
Лучше переписать так:
Этот вариант лучше, потому что логика становится прямолинейной и без лишних условий. Запрос проще читать, проще поддерживать, и оптимизатору проще рассуждать о предикатах, потому что они “голые”, без обертки в логическое ветвление.
👉 @SQLPortal
Один из самых частых SQL анти-паттернов это пихать
CASE прямо в WHERE, чтобы разрулить условную логику для диапазонов или фильтров.Классический пример:
SELECT * FROM products
WHERE
CASE WHEN category = 'Electronics' THEN price < 500 ELSE price < 100 END;
Работает, но часто убивает производительность, потому что
CASE делает предикат не SARGable в большинстве популярных СУБД. Оптимизатор уже не может нормально сделать index seek по индексу на price (или по составному индексу (category, price)). В итоге нередко получаешь full table scan, даже если индексы отличные.Лучше переписать так:
SELECT * FROM products
WHERE price < 100
OR (category = 'Electronics' AND price < 500);
Этот вариант лучше, потому что логика становится прямолинейной и без лишних условий. Запрос проще читать, проще поддерживать, и оптимизатору проще рассуждать о предикатах, потому что они “голые”, без обертки в логическое ветвление.
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3