Віктор Турський про програмування / навігатор

інструменти / postgresql

PostgreSQL

На каналі Postgres — архітектурна протилежність MySQL: кластерних індексів немає взагалі. Таблиці — це невпорядковані heap-и, індекси зберігають фізичні адреси рядків (їх видно через ctid), а вторинні індекси не містять первинного ключа — саме тому випадкові UUID як первинні ключі майже нічого не коштують Postgres, але спустошують MySQL (індекси в MySQL проти Postgres, UUID проти автоінкременту). Компроміс працює в інший бік через MVCC: оскільки оновлені версії рядків опиняються за новими фізичними адресами, оновлення однієї проіндексованої колонки змушує перебудувати ВСІ індекси таблиці (оптимізація HOT допомагає лише в межах одного блоку 8 КБ) — нутрощі, які Віктор повʼязує зі знаменитими міграціями Uber: Postgres → MySQL → Postgres.

В інших відео він зʼявляється як «такий самий, але інший» родич: EXPLAIN є й тут (навіщо індекси в базах даних), його розмір блоку 8 КБ визначає fan-out B+-дерева (~200–2000 дітей на вузол), а отже й глибину дерева (дерева, алгоритми пошуку та бази даних), а розуміння того, що насправді робить UPDATE у Postgres проти MySQL, — його приклад знання нутрощів, яке дозволяє передбачати поведінку на масштабі (3 речі, що роблять програміста кращим).

Розібрано у відео

Повʼязане

MySQL, Індекси баз даних, MVCC (багатоверсійне керування конкурентним доступом), UUID проти auto-increment у первинних ключах, B-tree / B+ tree