TRANSACTION ISOLATION LEVEL — управление конкурентным доступом!
Когда несколько транзакций работают с одними данными, возможны проблемы. Уровень изоляции определяет, насколько строго СУБД защищает данные от таких эффектов.
Пример настройки перед транзакцией (зависит от СУБД):
Основные Уровни:
🔥 Правильный уровень изоляции обеспечивает предсказуемость и надёжность даже при высокой конкуренции.
➡️ SQL Ready | #практика
Когда несколько транзакций работают с одними данными, возможны проблемы. Уровень изоляции определяет, насколько строго СУБД защищает данные от таких эффектов.
Пример настройки перед транзакцией (зависит от СУБД):
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
BEGIN;
SELECT * FROM accounts WHERE id = 1;
Основные Уровни:
READ UNCOMMITTED — минимальная защита, возможны «грязные» чтения:SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;
READ COMMITTED — предотвращает грязные чтения, но допускает неповторяемые и фантомные:SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
REPEATABLE READ — одни и те же строки возвращают одинаковые значения в рамках транзакции (поведение с фантомами зависит от СУБД):SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
SERIALIZABLE — максимальная изоляция: транзакции выполняются так, будто идут строго последовательно.SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
🔥 Правильный уровень изоляции обеспечивает предсказуемость и надёжность даже при высокой конкуренции.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥12👍7🤝7
insert ... on conflict позволяет вставить данные и одновременно обработать дубликаты без дополнительных проверок. Если запись уже существует, то выполняется обновление, если нет - добавляется новая.Сегодня в посте:
• Как работает on conflict и псевдотаблица excluded;
• Как обновлять только изменившиеся поля;
• Как писать лаконичные и надёжные операции без лишних запросов.
Всё происходит атомарно, в одном шаге и без лишней логики на стороне приложения.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍13❤11🔥9👎1
🔥13❤6👍6🤝1
В этой шпаргалке собраны основные команды языка определения данных, используемые для создания, изменения и удаления объектов базы данных: таблиц, столбцов, индексов и других элементов структуры. Они формируют архитектуру базы и позволяют гибко управлять её схемой. Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍18❤6🔥6
Индекс по выражению — ускоряй запросы без изменения схемы!
Часто запросы не используют индекс, хотя поле индексировано.
Причиной может быть функция в условии:
Даже если email проиндексирован, lower(email) ломает возможность использовать индекс.
Вариант решения - индекс по выражению (expression index):
Проверить можно через план запроса:
🔥 Теперь в плане
➡️ SQL Ready | #совет
Часто запросы не используют индекс, хотя поле индексировано.
Причиной может быть функция в условии:
SELECT * FROM users WHERE lower(email) = 'admin@example.com';
Даже если email проиндексирован, lower(email) ломает возможность использовать индекс.
Вариант решения - индекс по выражению (expression index):
CREATE INDEX users_lower_email_idx
ON users ((lower(email)));
Проверить можно через план запроса:
EXPLAIN ANALYZE
SELECT * FROM users WHERE lower(email) = 'admin@example.com';
🔥 Теперь в плане
Index Scan, а не Full Table Scan.Please open Telegram to view this post
VIEW IN TELEGRAM
👍14❤7🔥7👎1
В SQL нет привычных циклов, но есть полезные инструменты, которые позволяют строить повторяющиеся структуры (например, таблицу умножения 10×10).
Сегодня в посте:
• Генерируем числа от 1 до 10 с помощью GENERATE_SERIES();
• Объединяем их в пары через CROSS JOIN;
• Считаем произведения и форматируем результат в матрицу.
Такой приём не просто игра: его используют для генерации тестовых данных, создания временных сеток, расчёта комбинаций или аналитических карт.
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍15🔥10❤7