інструменти / 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 vs Postgres, UUID vs Auto Increment
heap-таблиці, ctid, перебудова індексів через MVCC, невразливість до UUID
- Навіщо потрібні індекси в базі даних — розберемо на прикладі
згадка для контрасту: кластерних індексів немає, обіцяний глибокий розбір
- Дерева. Пошук. Алгоритми. Бази даних
блоки 8 КБ визначають розмір вузлів B+-дерева
- 3 речі, які роблять програміста кращим
знання нутрощів як те, що відрізняє хорошого від видатного
Повʼязане
MySQL, Індекси баз даних, MVCC (багатоверсійне керування конкурентним доступом), UUID проти auto-increment у первинних ключах, B-tree / B+ tree