1. Чем REPEATABLE READ отличается от SERIALIZABLE?
REPEATABLE READ гарантирует, что данные, прочитанные в транзакции, не изменятся при повторном чтении. Однако он не защищает от логических аномалий при сложных условиях. SERIALIZABLE обеспечивает максимально строгую изоляцию, как если бы транзакции выполнялись строго последовательно. Это достигается ценой возможных ошибок сериализации и повторных попыток транзакций.2. В чём разница между B-Tree и Hash-индексом и почему Hash-индексы не поддерживают операции больше/меньше?
B-Tree индекс хранит данные в отсортированном виде, поэтому поддерживает диапазонные запросы. Hash-индекс использует хэш-функцию и не хранит порядок значений. Из-за этого он подходит только для точного поиска по равенству. Операции больше или меньше требуют упорядоченности, которой у Hash-индекса нет. Поэтому такие запросы он не поддерживает.
3. В каких случаях стоит использовать COPY вместо INSERT в Postgres?
COPY стоит использовать при массовой загрузке данных. Он работает значительно быстрее INSERT, потому что минимизирует накладные расходы и сетевые round-trip.
4. В чём суть уровня изоляции SERIALIZABLE?
SERIALIZABLE — самый строгий уровень изоляции транзакций. Он гарантирует, что результат параллельного выполнения транзакций эквивалентен их последовательному выполнению. Это устраняет все виды аномалий чтения. Цена за это — снижение производительности и возможные ошибки сериализации. Используется редко и осознанно.5. Почему PostgreSQL может не использовать индекс и предпочесть Seq Scan?
PostgreSQL выбирает план выполнения на основе оценки стоимости, а не наличия индекса. Если планировщик считает, что последовательное сканирование будет дешевле, он выберет
Seq Scan. Это часто происходит при выборке большого процента строк. Также причиной могут быть устаревшие статистики или неподходящий тип индекса.#transaction #isolation #btree #index #hash #postgres #copy #insert #serializable #query #planner