Що таке B-Tree (Balanced Tree)?

Обкладинка допису: Що таке B-Tree (Balanced Tree)?
ЗмістНатисність на посилання, щоб перейти до потрібного місця
B-Tree (Balanced Tree) - це структура даних, яка використовується в базах даних для швидкого пошуку, вставки та видалення записів. Вона організована у вигляді дерева, де кожен вузол містить ключі та посилання на дочірні вузли. Всі ключі в одному вузлі впорядковані, а інші вузли містять самі дані або посилання на рядки таблиці. Головна перевага B-Tree - баланс: висота дерева залишається мінімальною, що забезпечує пошук за логарифмічний час.
Індекси в базах даних працюють саме на основі B-Tree (у PostgreSQL та MySQL за замовчуванням). Коли ви створюєте індекс на колонку, база даних будує дерево за значеннями цієї колонки. Це дозволяє швидко знаходити потрібні записи без повного сканування таблиці. Наприклад, запит WHERE email = '[email protected]' використовує індекс, щоб відразу перейти до вузла з потрібним email замість перевірки всіх рядків.
У Rails індекси створюються через міграції. Наприклад, у PostgreSQL:
class AddIndexToUsersEmail < ActiveRecord::Migration[7.0]
  def change
    add_index :users, :email, unique: true
  end
end
Цей індекс забезпечує швидкий пошук користувача за email і гарантує унікальність значень. У MySQL синтаксис міграції такий самий, бо Rails абстрагує конкретну СУБД.
Внутрішньо база будує B-Tree за значеннями колонки email, і будь-який пошук через цей індекс проходить по вузлах дерева, а не по всій таблиці. Це значно підвищує швидкість запитів, особливо на великих таблицях.

Чи видно ці індекси в бд?

Якщо коротко - так. Але є нюанс. Індекси в базі даних видно, хоча вони не зберігаються як окремі таблиці у звичному сенсі. Кожна СУБД надає способи подивитися, які індекси існують на таблиці та їх властивості.
У PostgreSQL можна подивитися індекси через команду:
\d users
або через системні каталоги:
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'users';
Це покаже назви індексів, колонки, на яких вони створені, та тип індексу (B-Tree за замовчуванням).
У MySQL індекси можна подивитися так:
SHOW INDEX FROM users;
Тут буде список всіх індексів таблиці users, колонки, тип індексу (BTREE або інший), унікальність та порядок сортування.
У Rails можна подивитися індекси через консоль:
ActiveRecord::Base.connection.indexes(:users)
Вивід покаже масив об’єктів з інформацією про кожен індекс: назва, колонки, унікальність.
Тобто індекси реально існують у базі, і до них можна звертатися та аналізувати їх структуру, навіть якщо вони не відображаються як звичайна таблиця.

Цей допис поки що не має жодних доповнень від автора/ки.

Різниця між blank?, present?, empty? та nil? у Ruby
30 жовт., 21:06

Різниця між blank?, present?, empty? та nil? у Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Middleware у Ruby on Rails і коли воно використовується
04 лист., 10:39

Що таке Middleware у Ruby on Rails і коли воно використовується

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Vanilla Rails approach?
14 лист., 16:48

Що таке Vanilla Rails approach?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке Elasticsearch і як він працює?
22 лист., 12:35

Що таке Elasticsearch і як він працює?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Що таке time-series база даних?
22 лист., 12:42

Що таке time-series база даних?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
22 лист., 12:49

Що таке VACUUM у PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska