Starte bei den Queries, nicht bei der Tabelle. Schau, was in WHERE, JOIN und ORDER BY auftaucht, und bau dann einen zusammengesetzten Index mit den Gleichheitsspalten zuerst und der Bereichs- oder Sortierspalte zuletzt. Bestätige mit EXPLAIN ANALYZE, dass ein Index Scan den Sequential Scan ersetzt hat. Jeder Index kostet Schreibdurchsatz und Speicher, wirf also ungenutzte weg und indiziere keine Spalte mit niedriger Kardinalität für sich allein.
Warum Interviewer das fragen
Indizierung ist die Datenbankfähigkeit mit dem größten Hebel für einen Full-Stack-Entwickler, und sie lässt sich leicht vortäuschen, bis jemand nach der Spaltenreihenfolge fragt. Der Interviewer will wissen, ob du Query-Pläne liest, ob dir klar ist, dass Indizes eine Schreibsteuer sind und keine kostenlose Geschwindigkeit, und ob dir auffiele, dass ein Index pro Spalte ein häufiger und teurer Fehler ist.
So baust du deine Antwort auf
- Sag, dass Indizes den Query-Mustern folgen und nicht dem Schema.
- Erklär die Spaltenreihenfolge in einem zusammengesetzten Index.
- Beschreib, wie du es mit dem Query-Plan verifizierst.
- Nenn die Kostenseite: Schreibvorgänge, Speicher, ungenutzte Indizes.
Beispielantwort
Ich arbeite rückwärts vom Slow-Query-Log statt beim Entwurf zu raten. Nimm eine Query, die auf Tenant-Id und Status filtert und nach created_at sortiert. Der richtige Index ist dort auf tenant_id, status, created_at in genau dieser Reihenfolge, weil Gleichheitsprädikate zuerst kommen und die Sortierspalte zuletzt, damit der Index auch die Sortierung bedienen kann. Setz created_at nach vorn, und der Index ist für diese Query fast nutzlos. Dann führe ich tatsächlich EXPLAIN ANALYZE aus und prüfe, ob sich der Plan geändert hat und die Zeilenschätzungen plausibel sind, denn der Planner ignoriert einen Index, wenn er glaubt, ohnehin fast die ganze Tabelle zu treffen. Auf der Kostenseite habe ich eine schreiblastige Tabelle mit elf Indizes gesehen, bei der Inserts der Flaschenhals waren, und vier ungenutzte zu entfernen hat den Ingest-Durchsatz etwa verdoppelt. In Postgres schaue ich in pg_stat_user_indexes nach Indizes mit null Scans, bevor ich vorschlage, etwas zu löschen, und ich lege sie auf einer Live-Tabelle concurrently an.
Steht dieses Vorstellungsgespräch bald an? GhostPilot hört bei deinem Live-Call mit, erkennt die Frage in dem Moment, in dem sie gestellt wird, und bringt dir eine strukturierte Antwort in Echtzeit auf den Bildschirm. Probier es im nächsten Mock aus, oder hol dir einen $29 Session Pass, kein Abo, für den Ernstfall.
So funktioniert esNachfragen, mit denen du rechnen solltest
- Was ist ein Covering Index und wann hilft er?
- Warum könnte der Planner einen gerade angelegten Index ignorieren?
- Wann würdest du stattdessen einen partiellen Index nutzen?
Weitere Fragen für Full-Stack-Entwickler
Dein Interviewer stellt seine eigene Version davon. Kopier deine echte Stellenbeschreibung in den kostenlosen Question Predictor und bekomm die 20 Fragen, die diese Rolle am wahrscheinlichsten stellt, samt dem, worauf jede wirklich abzielt.
Meine Fragen vorhersagen