Cała oryginalna treść jest tworzona po ukraińsku. Nie wszystkie treści zostały jeszcze przetłumaczone. Niektóre posty mogą być dostępne tylko po ukraińsku.Dowiedz się więcej

Czym jest B-Tree (drzewo zrównoważone)?

Okładka posta: Czym jest B-Tree (drzewo zrównoważone)?
Spis treściKliknij link, aby przejść do wybranego miejsca
Ta treść została automatycznie przetłumaczona z ukraińskiego.
B-Tree (Drzewo zrównoważone) - to struktura danych, która jest używana w bazach danych do szybkiego wyszukiwania, wstawiania i usuwania rekordów. Jest zorganizowana w formie drzewa, gdzie każdy węzeł zawiera klucze i odnośniki do węzłów potomnych. Wszystkie klucze w jednym węźle są uporządkowane, a inne węzły zawierają same dane lub odnośniki do wierszy tabeli. Główną zaletą B-Tree jest balans: wysokość drzewa pozostaje minimalna, co zapewnia wyszukiwanie w czasie logarytmicznym.
Indeksy w bazach danych działają właśnie na podstawie B-Tree (w PostgreSQL i MySQL domyślnie). Kiedy tworzysz indeks na kolumnę, baza danych buduje drzewo na podstawie wartości tej kolumny. To pozwala szybko znajdować potrzebne rekordy bez pełnego skanowania tabeli. Na przykład zapytanie WHERE email = '[email protected]' wykorzystuje indeks, aby od razu przejść do węzła z odpowiednim emailem zamiast sprawdzać wszystkie wiersze.
W Rails indeksy są tworzone za pomocą migracji. Na przykład w PostgreSQL:
class AddIndexToUsersEmail < ActiveRecord::Migration[7.0]
  def change
    add_index :users, :email, unique: true
  end
end
Ten indeks zapewnia szybkie wyszukiwanie użytkownika po emailu i gwarantuje unikalność wartości. W MySQL składnia migracji jest taka sama, ponieważ Rails abstrahuje konkretną SGBD.
Wewnątrz baza buduje B-Tree na podstawie wartości kolumny email, a każde wyszukiwanie przez ten indeks przechodzi przez węzły drzewa, a nie przez całą tabelę. To znacznie zwiększa szybkość zapytań, szczególnie w dużych tabelach.

Czy te indeksy są widoczne w bazie danych?

Jeśli krótko - tak. Ale jest pewien szczegół. Indeksy w bazie danych są widoczne, chociaż nie są przechowywane jako oddzielne tabele w tradycyjnym sensie. Każda SGBD udostępnia sposoby, aby zobaczyć, jakie indeksy istnieją na tabeli oraz ich właściwości.
W PostgreSQL można zobaczyć indeksy za pomocą polecenia:
\d users
lub przez katalogi systemowe:
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'users';
To pokaże nazwy indeksów, kolumny, na których zostały utworzone, oraz typ indeksu (B-Tree domyślnie).
W MySQL indeksy można zobaczyć w ten sposób:
SHOW INDEX FROM users;
Tu będzie lista wszystkich indeksów tabeli users, kolumny, typ indeksu (BTREE lub inny), unikalność oraz porządek sortowania.
W Rails można zobaczyć indeksy przez konsolę:
ActiveRecord::Base.connection.indexes(:users)
Wynik pokaże tablicę obiektów z informacjami o każdym indeksie: nazwa, kolumny, unikalność.
To znaczy, że indeksy rzeczywiście istnieją w bazie, i można się do nich odwoływać oraz analizować ich strukturę, nawet jeśli nie są wyświetlane jako zwykła tabela.

Ten post nie ma jeszcze żadnych dodatków od autora.

Różnica między blank?, present?, empty? a nil? w Ruby
30 paź 21:06

Różnica między blank?, present?, empty? a nil? w Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Middleware w Ruby on Rails i kiedy jest używane
4 lis 10:39

Czym jest Middleware w Ruby on Rails i kiedy jest używane

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest podejście Vanilla Rails?
14 lis 16:48

Czym jest podejście Vanilla Rails?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Elasticsearch i jak działa?
22 lis 12:35

Czym jest Elasticsearch i jak działa?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest baza danych typu time-series?
22 lis 12:42

Czym jest baza danych typu time-series?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
22 lis 12:49

Co to jest VACUUM w PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)
30 gru 14:05

Fix problem with installing Ruby 3.4.3 (and not only) via RVM on macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję
15 sty 10:14

Problem Grzmiącego Stada: co to jest i dlaczego łamie produkcję

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Czym jest Exponential Backoff i Random Jitter?
15 sty 15:24

Czym jest Exponential Backoff i Random Jitter?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).
15 lut 13:45

Podłączenie usługi Elasticsearch do aplikacji Rails (Coolify w chmurze, serwer na Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk
15 lut 19:57

„Brak miejsca na urządzeniu” - kiedy Docker zjadł cały dysk

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
15 lut 20:03

Sidekiq 7.3.x i connection_pool 3.0 - niekompatybilność, która łamie pracowników

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