0Pricing
Coding Interview Prep · Lektion

Spaltenreihenfolge in zusammengesetzten Indizes

Die Regel des Präfixes von links und die Wahl der richtigen Spaltenreihenfolge für eine Arbeitslast.

Spaltenreihenfolge in zusammengesetzten Indizes ist eine kostenlose Coding Interview Prep-Lektion auf CoddyKit. Dies ist Lektion 2 von 4. Du kannst die komplette Lektion unten kostenlos lesen – dann übst du sie direkt im Browser mit einem integrierten Code-Editor und einem KI-Tutor rund um die Uhr. Sie ist Teil des Coding Interview Prep-Lernpfads, und dein Fortschritt wird über Web und CoddyKit-App synchronisiert. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Die Frage nach dem zusammengesetzten Index

Sobald Sie einen Index für eine einzelne Spalte erklären können, erhöhen Interviewer den Schwierigkeitsgrad: „Sie fragen gemeinsam nach customer_id und order_date ab. Wie würden Sie das indizieren?“ Erwartet wird ein zusammengesetzter Index (Index über mehrere Spalten) sowie eine Begründung für die Spaltenreihenfolge.

Diese Lektion vermittelt die Linkspräfix-Regel – die eine Idee, die fast jede Frage zu zusammengesetzten Indizes erklärt.

Was ein zusammengesetzter Index ist

Ein zusammengesetzter Index indiziert mehrere Spalten als geordnetes Tupel. Die Einträge werden zuerst nach der ersten Spalte sortiert, dann bei gleichen Werten nach der zweiten und so weiter – genau wie ein Telefonbuch, das zuerst nach dem Nachnamen und dann nach dem Vornamen sortiert ist.

Die Reihenfolge ist von großer Bedeutung, da die Sortierpriorität der von Ihnen festgelegten Spaltenreihenfolge folgt.

CREATE INDEX idx_orders_cust_date
  ON orders (customer_id, order_date);

Die Linkspräfix-Regel

Die zentrale Regel lautet: Ein zusammengesetzter Index auf (A, B, C) kann für Abfragen verwendet werden, die nach einem Linkspräfix dieser Spalten filtern:

  • A allein: ja
  • A, B: ja
  • A, B, C: ja
  • B allein: NEIN
  • B, C: NEIN

Denken Sie an das Telefonbuch: Sie können alle Personen mit dem Nachnamen „Smith“ finden, aber nicht effizient alle Personen mit dem Vornamen „John“, unabhängig vom Nachnamen, weil das Buch nicht in dieser Reihenfolge sortiert ist.

Durchgespieltes Beispiel: Treffer beim Präfix

Mit dem Index auf (customer_id, order_date) können diese Abfragen ihn verwenden, weil sie mit customer_id beginnen:

Die erste verwendet nur die führende Spalte. Die zweite verwendet beide Spalten: Sie schränkt zunächst über customer_id ein und sucht anschließend innerhalb der nach Datum sortierten Einträge dieses Kunden.

-- Uses the index (leading column)
SELECT * FROM orders WHERE customer_id = 42;

-- Uses the index fully (both columns, in order)
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

Durchgespieltes Beispiel: Das Präfix passt nicht

Diese Abfrage filtert nur nach der zweiten Spalte. Daher kann der Index auf (customer_id, order_date) den Lookup im Allgemeinen nicht steuern – die Einträge sind nicht global nach order_date sortiert.

Wenn das Filtern allein nach order_date ein häufiges Muster ist, benötigen Sie einen separaten Index, der mit order_date beginnt.

-- Does NOT use idx_orders_cust_date efficiently
SELECT * FROM orders
WHERE order_date >= '2026-01-01';

-- Fix: an index that leads with order_date
CREATE INDEX idx_orders_date ON orders (order_date);

Gleichheit vor Bereich

Eine Präzisierung auf Senior-Niveau: Setzen Sie Spalten, die mit Gleichheit (=) verwendet werden, vor Spalten, die mit einem Bereich (<, >, BETWEEN) verwendet werden. Sobald der Index eine Bereichsspalte erreicht, kann er nachfolgende Spalten nicht mehr nutzen, um den Suchbereich weiter einzugrenzen.

Für eine Abfrage wie status = 'paid' AND created_at > ? ist die richtige Reihenfolge (status, created_at), nicht die umgekehrte.

-- Query: WHERE status = 'paid' AND created_at > '2026-01-01'
-- Good: equality column first
CREATE INDEX idx_orders_status_created
  ON orders (status, created_at);

Die führende Spalte auswählen

Wie wählen Sie aus, welche Spalte an erster Stelle steht? Interviewer erwarten eine an der tatsächlichen Nutzung orientierte Antwort:

  • Setzen Sie die Spalte an die erste Stelle, die in den meisten Abfragen vorkommt, insbesondere als Gleichheitsfilter.
  • Bevorzugen Sie eine Spalte mit hoher Selektivität (vielen unterschiedlichen Werten), damit der erste Schritt die meisten Zeilen ausschließt.
  • Berücksichtigen Sie die Anforderungen von ORDER BY: Wenn die Indexreihenfolge passt, kann eine Sortierung vermieden werden.

Die führende Spalte ist diejenige, die über Ihre tatsächliche Mischung von Abfragen hinweg die meiste Filterarbeit leistet.

Ein zusammengesetzter Index hilft beim Sortieren

Ein zusammengesetzter Index kann auch ORDER BY auf einem Linkspräfix bedienen. Da die Einträge zuerst nach customer_id und dann nach order_date sortiert sind, ist eine Abfrage nach den Bestellungen eines Kunden, sortiert nach Datum, praktisch kostenlos – eine separate Sortierung ist nicht erforderlich.

-- No sort step: the index already supplies this order
SELECT * FROM orders
WHERE customer_id = 42
ORDER BY order_date;

Keine redundanten Indizes anlegen

Kandidaten legen häufig zu viele Indizes an. Wenn bereits (customer_id, order_date) vorhanden ist, ist ein separater Index nur auf (customer_id) meistens redundant, da der zusammengesetzte Index Abfragen über die führende Spalte bereits abdeckt.

Jeder zusätzliche Index benötigt Speicherplatz und verlangsamt Schreibvorgänge. Ziel ist daher die kleinstmögliche Menge an Indizes, die Ihre Abfragemuster abdeckt, nicht ein Index pro Spalte.

Mit EXPLAIN den Beweis liefern

Bestätigen Sie wie immer die Entscheidung des Planers. Führen Sie nach dem Erstellen eines zusammengesetzten Index EXPLAIN aus und prüfen Sie, ob er als Index Scan erscheint und wie viele Zeilen geschätzt werden.

Wenn eine Abfrage mit nicht passendem Präfix auf einen sequenziellen Scan zurückfällt, ist das der Beleg dafür, dass die Spaltenreihenfolge nicht zur Arbeitslast passt – genau das würden Sie einem Interviewer erklären.

EXPLAIN
SELECT * FROM orders
WHERE customer_id = 42
  AND order_date >= '2026-01-01';

So formulieren Sie es im Interview

Eine prägnante Zusammenfassung:

„Ein zusammengesetzter Index wird von links nach rechts nach seinen Spalten sortiert. Daher kann er jedes Linkspräfix dieser Spalten bedienen, aber keine Teilmenge, die erst bei einer späteren Spalte beginnt. Ich setze die am stärksten filternde, hochselektive Spalte an die erste Stelle, platziere Gleichheitsprädikate vor Bereichsprädikaten und berücksichtige nach Möglichkeit ORDER BY. Anschließend überprüfe ich das Ergebnis mit EXPLAIN.“

Kurzer Check

Wenden Sie die Regel des längsten linken Präfixes an.

Zusammenfassung: Reihenfolge zusammengesetzter Indizes

Die wichtigsten Erkenntnisse:

  • Ein zusammengesetzter Index wird von links nach rechts sortiert und unterstützt nur ein linkes Präfix seiner Spalten.
  • Beginnen Sie mit der am häufigsten abgefragten Spalte mit hoher Selektivität.
  • Platzieren Sie Gleichheitsbedingungen vor Bereichsbedingungen.
  • Ein passendes Präfix kann auch ORDER BY ohne zusätzliche Sortierung erfüllen.
  • Vermeiden Sie redundante Einzelspaltenindizes, die bereits durch einen zusammengesetzten Index abgedeckt sind, und überprüfen Sie dies mit EXPLAIN.

Als Nächstes: Covering-Indizes, die den Heap-Fetch vollständig vermeiden.

Häufig gestellte Fragen

Ist die Lektion „Spaltenreihenfolge in zusammengesetzten Indizes“ kostenlos?

Ja — der vollständige Text von „Spaltenreihenfolge in zusammengesetzten Indizes“ ist hier im Web kostenlos zu lesen. Um sie interaktiv zu üben (integrierter Code-Editor und 24/7 KI-Tutor) und den Rest des Coding Interview Prep-Kurses freizuschalten, upgrade auf CoddyKit PRO. Der Coding Interview Prep-Kurs umfasst insgesamt 4 Lektionen.

Was lerne ich in „Spaltenreihenfolge in zusammengesetzten Indizes“?

Die Regel des Präfixes von links und die Wahl der richtigen Spaltenreihenfolge für eine Arbeitslast. Du übst Coding Interview Prep mit praktischem Code, den du direkt im Browser ausführst, und ein 24/7 KI-Tutor beantwortet deine Fragen während du die Lektion bearbeitest.

Brauche ich Erfahrung, um Coding Interview Prep zu starten?

Keine Vorkenntnisse erforderlich. Coding Interview Prep auf CoddyKit ist für Anfänger bis fortgeschrittene Lernende strukturiert, sodass du hier starten oder von Anfang an beginnen und in deinem eigenen Tempo voranschreiten kannst. Dies ist Lektion 2 von 4.

Wie lange dauert die Lektion „Spaltenreihenfolge in zusammengesetzten Indizes“?

Die meisten CoddyKit-Lektionen dauern etwa 5–10 Minuten. Jede ist kompakt und interaktiv, sodass du stetig Fortschritte machst und genau dort weitermachst, wo du aufgehört hast – im Web und in der App.

Kann ich in dieser Coding Interview Prep-Lektion Code schreiben und ausführen?

Ja. Jede Coding Interview Prep-Lektion enthält einen integrierten Code-Editor, sodass du echten Code direkt in deinem Browser schreibst und ausführst und sofort KI-Feedback erhältst — ohne lokale Einrichtung erforderlich.

Alle Lektionen in diesem Kurs

  1. B-Tree-Indizes und ihr Nutzen
  2. Spaltenreihenfolge in zusammengesetzten Indizes
  3. Abdeckende Indizes und Index-Only-Scans
  4. Wann Indizes schaden: Schreibvorgänge und Selektivität
← Zurück zu Coding Interview Prep