Alle Originalinhalte werden auf Ukrainisch erstellt. Noch nicht alle Inhalte wurden übersetzt. Einige Beiträge sind möglicherweise nur auf Ukrainisch verfügbar.Mehr erfahren

Was ist ein B-Baum (ausgeglichener Baum)?

Beitrags-Cover: Was ist ein B-Baum (ausgeglichener Baum)?
InhaltsverzeichnisKlicke auf den Link, um zur gewünschten Stelle zu navigieren
Dieser Inhalt wurde automatisch aus dem Ukrainischen übersetzt.
B-Tree (Ausgewogenes Baum) - ist eine Datenstruktur, die in Datenbanken für schnelle Suche, Einfügung und Löschung von Datensätzen verwendet wird. Sie ist in Form eines Baumes organisiert, wobei jeder Knoten Schlüssel und Verweise auf untergeordnete Knoten enthält. Alle Schlüssel in einem Knoten sind sortiert, während andere Knoten die eigentlichen Daten oder Verweise auf Zeilen der Tabelle enthalten. Der Hauptvorteil des B-Tree ist das Gleichgewicht: Die Höhe des Baumes bleibt minimal, was eine Suche in logarithmischer Zeit ermöglicht.
Indizes in Datenbanken basieren genau auf B-Tree (in PostgreSQL und MySQL standardmäßig). Wenn Sie einen Index auf eine Spalte erstellen, baut die Datenbank einen Baum basierend auf den Werten dieser Spalte. Dies ermöglicht es, die benötigten Datensätze schnell zu finden, ohne die gesamte Tabelle scannen zu müssen. Zum Beispiel verwendet die Abfrage WHERE email = '[email protected]' den Index, um sofort zum Knoten mit der benötigten E-Mail zu gelangen, anstatt alle Zeilen zu überprüfen.
In Rails werden Indizes über Migrationen erstellt. Zum Beispiel in PostgreSQL:
class AddIndexToUsersEmail < ActiveRecord::Migration[7.0]
  def change
    add_index :users, :email, unique: true
  end
end
Dieser Index ermöglicht eine schnelle Suche nach Benutzern anhand der E-Mail und garantiert die Eindeutigkeit der Werte. In MySQL ist die Syntax der Migration dieselbe, da Rails das spezifische DBMS abstrahiert.
Intern baut die Datenbank einen B-Tree basierend auf den Werten der Spalte email, und jede Suche über diesen Index erfolgt über die Knoten des Baumes, nicht über die gesamte Tabelle. Dies erhöht die Geschwindigkeit der Abfragen erheblich, insbesondere bei großen Tabellen.

Sind diese Indizes in der DB sichtbar?

Kurz gesagt - ja. Aber es gibt einen Haken. Indizes in der Datenbank sind sichtbar, obwohl sie nicht als separate Tabellen im herkömmlichen Sinne gespeichert werden. Jedes DBMS bietet Möglichkeiten, um zu sehen, welche Indizes auf einer Tabelle existieren und deren Eigenschaften.
In PostgreSQL können Sie die Indizes mit dem Befehl ansehen:
\d users
oder über die Systemkataloge:
SELECT indexname, indexdef
FROM pg_indexes
WHERE tablename = 'users';
Dies zeigt die Namen der Indizes, die Spalten, auf denen sie erstellt wurden, und den Typ des Index (B-Tree standardmäßig).
In MySQL können die Indizes so angesehen werden:
SHOW INDEX FROM users;
Hier wird eine Liste aller Indizes der Tabelle users angezeigt, die Spalten, den Typ des Index (BTREE oder einen anderen), die Eindeutigkeit und die Sortierreihenfolge.
In Rails können die Indizes über die Konsole angesehen werden:
ActiveRecord::Base.connection.indexes(:users)
Die Ausgabe zeigt ein Array von Objekten mit Informationen zu jedem Index: Name, Spalten, Eindeutigkeit.
Das heißt, Indizes existieren tatsächlich in der Datenbank, und sie können angesprochen und ihre Struktur analysiert werden, auch wenn sie nicht als gewöhnliche Tabelle angezeigt werden.

Dieser Beitrag hat noch keine Ergänzungen vom Autor.

Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby
30. Okt, 21:06 Uhr

Der Unterschied zwischen blank?, present?, empty? und nil? in Ruby

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Middleware in Ruby on Rails und wann wird sie verwendet?
04. Nov, 10:39 Uhr

Was ist Middleware in Ruby on Rails und wann wird sie verwendet?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist der Vanilla Rails-Ansatz?
14. Nov, 16:48 Uhr

Was ist der Vanilla Rails-Ansatz?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Elasticsearch und wie funktioniert es?
22. Nov, 12:35 Uhr

Was ist Elasticsearch und wie funktioniert es?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist eine Zeitreihen-Datenbank?
22. Nov, 12:42 Uhr

Was ist eine Zeitreihen-Datenbank?

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

Was ist VACUUM in PostgreSQL?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Fix des Problems bei der Installation von Ruby 3.4.3 (und nicht nur) über RVM auf macOS (Apple Silicon)
30. Dez, 14:05 Uhr

Fix des Problems bei der Installation von Ruby 3.4.3 (und nicht nur) über RVM auf macOS (Apple Silicon)

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Thundering Herd Problem: was ist das und warum bricht es die Produktion
15. Jan, 10:14 Uhr

Thundering Herd Problem: was ist das und warum bricht es die Produktion

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Was ist Exponential Backoff und Random Jitter?
15. Jan, 15:24 Uhr

Was ist Exponential Backoff und Random Jitter?

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
Anbindung des Elasticsearch-Dienstes an die Rails-Anwendung (Coolify in der Cloud, Server bei Hetzner).
15. Feb, 13:45 Uhr

Anbindung des Elasticsearch-Dienstes an die Rails-Anwendung (Coolify in der Cloud, Server bei Hetzner).

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
„Kein Speicherplatz mehr auf dem Gerät“ - wenn Docker die ganze Festplatte aufgefressen hat
15. Feb, 19:57 Uhr

„Kein Speicherplatz mehr auf dem Gerät“ - wenn Docker die ganze Festplatte aufgefressen hat

Нотатки про Ruby та RoR
Нотатки про Ruby та RoR@kovbaska
15. Feb, 20:03 Uhr

Sidekiq 7.3.x und connection_pool 3.0 - Inkompatibilität, die die Worker bricht

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