інструменти / mysql
MySQL
Стандартний експериментальний полігон каналу: майже всі демо з базами даних крутяться на MySQL — через SET profiling, CREATE INDEX та EXPLAIN (Навіщо потрібні індекси в базі даних — розберемо на прикладі). Її визначальна архітектурна риса у викладі Віктора — кластерний індекс: сама таблиця є B+ tree, відсортованим за первинним ключем — вона буквально не може існувати без нього (пропустіть PK — і MySQL мовчки додасть прихований 6-байтовий). Звідси все, що він вимірює: пошук за вторинним індексом — це подвійний пошук, а випадкові UUID у ролі первинних ключів роздувають таблицю з 4.3 ГБ до 7.8 ГБ і сповільнюють вставки у 2.5–3 рази на повільних дисках — серцевина вердикту UUID проти auto-increment (Як працюють індекси в базах на прикладі: MySQL vs Postgres, UUID vs Auto Increment). Плюс у порівнянні з PostgreSQL: за MVCC MySQL оновлює лише той індекс, якого реально торкнулася зміна, а не перебудовує всі.
В арці про повнотекстовий пошук MySQL грає і базову лінію, і суперника: LIKE '%...%' займає 40 с на 16.5 млн рядків (а на HDD взагалі відвалюється по таймауту), тоді як CREATE FULLTEXT INDEX будується 14 хвилин і займає 1.7 ГБ — більше за його саморобний інвертований індекс на 1.3 ГБ — хоча й підтримує булеві запити must/must-not; всередині InnoDB FULLTEXT розвʼязує проблему UUID-ідентифікаторів документів прихованою auto-increment колонкою FTS_DOC_ID (Як працює повнотекстовий пошук: будуємо інвертований індекс на практиці, Як працює повнотекстовий пошук, частина 2: запитання-відповіді й подальші оптимізації). У бенчмарках із Bloom-фільтром він зазначає, що точкові пошуки в MySQL майже такі ж швидкі, як кеш, — повільність живе у сканах і джоїнах — і демонструє Handler Socket, прямий доступ до індексу в обхід планувальника запитів (трюк, який він оцінював ще в часи роботи над Порталом), — той виявляється лише трохи швидшим за prepared statements по індексу (Геніальна структура даних й як її покращив Firefox). MySQL — це і його дежурний приклад необхідної глибини: якщо ви не знаєте, як вона обробляє UPDATE чи як поводиться зі зростанням даних, ви не знаєте її властивостей (3 речі, які роблять програміста кращим).
Розібрано у відео
- Навіщо потрібні індекси в базі даних — розберемо на прикладі
усі первісні демо з індексами: профілювання, EXPLAIN, 3.3 с → 0.05 мс
- Як працюють індекси в базах на прикладі: MySQL vs Postgres, UUID vs Auto Increment
три таблиці по 16 млн рядків, covering-індекси в EXPLAIN, бенчмарки вставок, архітектура кластерного індексу
- Дерева. Пошук. Алгоритми. Бази даних
вузли дерева індексу обмежені розміром блоку, а не кількістю елементів
- Як працює повнотекстовий пошук: будуємо інвертований індекс на практиці
базова лінія LIKE проти суперника FULLTEXT (1.7 ГБ, 14 хв побудови)
- Як працює повнотекстовий пошук, частина 2: запитання-відповіді й подальші оптимізації
прихована колонка FTS_DOC_ID в InnoDB; LIKE, що відвалюється по таймауту на HDD
- Геніальна структура даних й як її покращив Firefox
бенчмарки на 10 млн ключів і відступ про Handler Socket
- Питання та відповіді №1: чи захистить HTTPS?
UUID-ключі як BINARY(16) на практиці
- 3 речі, які роблять програміста кращим
нутрощі MySQL як приклад потрібної глибини
Повʼязане
Індекси баз даних, B-tree / B+ tree, UUID проти auto-increment у первинних ключах, MVCC (багатоверсійне керування конкурентним доступом), Повнотекстовий пошук, PostgreSQL