14. Apr. 2025·7 Min. Lesezeit

Indexierung für Admin-Panels: Zuerst die meistgenutzten Filter optimieren

Indexierung für Admin-Panels: Optimieren Sie die Filter, die Nutzer am häufigsten anklicken – Status, Bearbeiter, Datumsbereiche und Textsuche – basierend auf realen Abfragemustern.

Indexierung für Admin-Panels: Zuerst die meistgenutzten Filter optimieren

Warum Filter in Admin-Panels langsam werden

Admin-Panels wirken anfangs oft schnell. Sie öffnen eine Liste, scrollen, klicken einen Datensatz an und machen weiter. Die Verlangsamung zeigt sich, wenn Leute filtern, wie sie tatsächlich arbeiten: „Nur offene Tickets“, „Zuständig: Maya“, „Erstellt letzte Woche“, „Bestellnummer enthält 1047“. Jeder Klick löst eine Wartezeit aus und die Liste wirkt klebrig.

Dasselbe Table kann für einen Filter schnell und für einen anderen quälend langsam sein. Ein Statusfilter kann nur einen kleinen Ausschnitt der Zeilen berühren und schnell zurückgeben. Ein „zwischen zwei Daten erstellt“-Filter kann die Datenbank zwingen, einen großen Bereich zu lesen. Ein Assignee-Filter kann alleine gut laufen und langsamer werden, sobald Sie ihn mit Status und Sortierung kombinieren.

Indizes sind die Abkürzung, die eine Datenbank verwendet, um passende Zeilen zu finden, ohne die ganze Tabelle zu lesen. Indizes sind aber nicht kostenfrei. Sie brauchen Platz und machen Einfügungen und Updates etwas langsamer. Zu viele Indizes können Schreibvorgänge verlangsamen und trotzdem das eigentliche Nadelöhr nicht beheben.

Statt alles zu indexieren, priorisieren Sie die Filter, die:

  • ständig genutzt werden
  • viele Zeilen betreffen
  • spürbare Wartezeiten erzeugen
  • sich mit einfachen, passenden Indizes sicher verbessern lassen

Das bleibt absichtlich eng gefasst. Die ersten Performance-Beschwerden in Admin-Listen kommen fast immer von denselben vier Filtertypen: Status, Bearbeiter, Datumsbereiche und Textfelder. Wenn Sie verstehen, warum sich diese unterschiedlich verhalten, sind die nächsten Schritte klar: schauen Sie sich reale Abfragemuster an, fügen Sie den kleinsten Index hinzu, der dazu passt, und prüfen Sie, ob Sie den langsamen Pfad verbessert haben, ohne neue Probleme zu schaffen.

Die Abfragemuster hinter echter Admin-Arbeit

Admin-Panels sind selten wegen eines riesigen Reports langsam. Sie werden langsam, weil ein paar Bildschirme den ganzen Tag benutzt werden und diese Bildschirme viele kleine Abfragen immer wieder ausführen.

Ops-Teams leben meist in einer Handvoll Work-Queues: Tickets, Bestellungen, Nutzer, Genehmigungen, interne Anfragen. Auf diesen Seiten wiederholen sich die Filter:

  • Status, weil er den Workflow abbildet (Neu, Offen, Ausstehend, Erledigt)
  • Bearbeiter, weil Teams „meine Items“ und „unzugewiesen“ brauchen
  • Datumsbereiche, weil immer jemand fragt „was ist letzte Woche passiert?"
  • Suche, entweder um zu einem bekannten Eintrag zu springen (Bestellnummer, E-Mail) oder um Text zu scannen (Notizen, Vorschauen)

Die Datenbankarbeit hängt von der Absicht ab:

  • Browse newest ist ein Scan-Muster. Meist sieht das so aus: „zeige die neuesten Einträge, vielleicht auf einen Status eingeschränkt, sortiert nach Erstellungszeit“ und es ist paginiert.
  • Find a specific item ist ein Lookup-Muster. Der Admin hat bereits eine ID, E-Mail, Ticketnummer oder Referenz und erwartet, dass die Datenbank direkt zu einer kleinen Menge Zeilen springt.

Admin-Panels kombinieren Filter auch auf vorhersehbare Weise: „Offen + Unzugewiesen“, „Ausstehend + Mir zugewiesen“ oder „Abgeschlossen in den letzten 30 Tagen“. Indizes funktionieren am besten, wenn sie zu diesen realen Abfrageformen passen, nicht nur zu einer Liste von Spalten.

Wenn Sie Admin-Tools in AppMaster bauen, sind diese Muster oft sichtbar, wenn Sie sich die meistgenutzten Listenbildschirme und ihre Standardfilter anschauen. So lässt sich gezielt auf das indexieren, was den täglichen Ablauf antreibt, statt auf das, was auf dem Papier gut aussieht.

Wie Sie auswählen, was zuerst zu indexieren ist

Behandeln Sie Indexierung wie Triage. Beginnen Sie nicht damit, jede Spalte zu indexieren, die in einem Filter-Dropdown erscheint. Starten Sie mit den wenigen Abfragen, die ständig laufen und die Leute am meisten nerven.

Finden Sie die Filter, die Leute tatsächlich nutzen

Optimierung eines Filters, den niemand anfasst, ist verschwendete Arbeit. Um die echten Hot Paths zu finden, kombinieren Sie Signale:

  • UI-Analytics: Welche Bildschirme werden am häufigsten angesehen, welche Filter oft angeklickt
  • Datenbank- oder API-Logs: häufigste Abfragen und die langsamsten Prozentpunkte
  • Internes Feedback: „Suche ist langsam“ weist meist auf einen konkreten Bildschirm hin
  • Die Standard-Listenansicht: was läuft genau beim Öffnen des Admin-Panels

In vielen Teams ist diese Standardansicht etwas wie „Offene Tickets“ oder „Neue Bestellungen“. Sie läuft jedes Mal, wenn jemand aktualisiert, Tabs wechselt oder nach einer Antwort zurückkehrt.

Gruppieren Sie Abfragen nach Form, nicht nach Feldname

Bevor Sie einen Index hinzufügen, gruppieren Sie Ihre häufigen Abfragen nach ihrem Verhalten. Die meisten Admin-Listenabfragen fallen in ein paar Buckets:

  • Gleichheitsfilter: status = 'open', assignee_id = 42
  • Bereichsfilter: created_at zwischen zwei Daten
  • Sortierung und Paginierung: ORDER BY created_at DESC und Seite 2 holen
  • Textsuchen: exakter Treffer (Bestellnummer), Prefix-Suche (E-Mail beginnt mit), oder Contains-Suche

Schreiben Sie die Form für jeden Top-Bildschirm auf, inklusive WHERE, ORDER BY und Paginierung. Zwei Abfragen, die in der UI ähnlich aussehen, können sich in der Datenbank sehr unterschiedlich verhalten.

Wählen Sie eine kleine Anfangsgruppe

Starten Sie mit einem Prioritätsziel: der Standard-Listenabfrage, die zuerst lädt. Wählen Sie dann 2–3 weitere häufige Abfragen. Das reicht meist, um die größten Verzögerungen zu reduzieren, ohne Ihre Datenbank in ein Indexmuseum zu verwandeln.

Beispiel: Ein Support-Team öffnet eine Tickets-Liste gefiltert auf status = 'open', sortiert nach neuesten, mit optionalem Bearbeiter und Datumsbereich. Optimieren Sie genau diese Kombination zuerst. Wenn das schnell ist, gehen Sie zum nächsten Bildschirm nach Nutzung.

Status-Filter indexieren, ohne zu übertreiben

Status ist einer der ersten Filter, die man hinzufügt, und einer der einfachsten, falsch zu indexieren.

Die meisten Status-Felder haben eine geringe Kardinalität: nur wenige Werte (open, pending, closed). Ein Index hilft vor allem, wenn er die Ergebnisse auf einen kleinen Teil der Tabelle eingrenzt. Wenn 80–95 % der Zeilen denselben Status haben, ändert ein reiner status-Index oft nicht viel. Die Datenbank muss dann trotzdem einen großen Teil der Zeilen lesen, und der Index verursacht Overhead.

Der Nutzen zeigt sich meist, wenn:

  • ein Status selten ist (z. B. escalated)
  • Status mit einer anderen Bedingung kombiniert wird, die die Ergebnismenge klein macht
  • Status plus Sortierung einer häufigen Listenansicht entspricht

Ein häufiges Muster ist „zeige mir offene Items, neueste zuerst." In diesem Fall ist das Indexieren der Filterung zusammen mit der Sortierung oft wirkungsvoller als ein reiner status-Index.

Kombinationen, die sich zuerst auszahlen:

  • status + updated_at (Filter nach Status, Sortierung nach jüngsten Änderungen)
  • status + assignee_id (Work-Queue-Ansichten)
  • status + updated_at + assignee_id (nur wenn diese exakte Ansicht stark genutzt wird)

Partielle Indizes sind ein guter Kompromiss, wenn ein Status dominiert. Wenn „open“ die Hauptansicht ist, indexieren Sie nur offene Zeilen. Der Index bleibt kleiner und die Schreibkosten bleiben niedriger.

-- PostgreSQL example: index only open rows, optimized for newest-first lists
CREATE INDEX CONCURRENTLY tickets_open_updated_idx
ON tickets (updated_at DESC)
WHERE status = 'open';

Ein praktischer Test: Führen Sie die langsame Admin-Abfrage mit und ohne Statusfilter aus. Wenn sie in beiden Fällen langsam ist, rettet ein reiner Status-Index sie nicht. Konzentrieren Sie sich auf die Sortierung und den zweiten Filter, der die Liste wirklich verkleinert.

Assignee-Filter: Gleichheitsindizes und gängige Kombinationen

Erstellen Sie Ihr Admin-Panel schneller
Bauen Sie ein schnelles Admin-Panel mit realen Workflows, Filtern und Paginierung in wenigen Minuten.
AppMaster testen

In den meisten Admin-Panels ist der Bearbeiter eine Nutzer-ID auf dem Datensatz: ein Fremdschlüssel wie assignee_id. Das ist ein klassischer Gleichheitsfilter und oft ein schneller Gewinn mit einem einfachen Index.

Der Bearbeiter tritt auch zusammen mit anderen Filtern auf, weil er die Arbeitsweise abbildet. Ein Support-Lead filtert vielleicht auf „Assigned to Alex“ und verengt dann auf „Open“, um zu sehen, was noch zu tun ist. Wenn diese Ansicht langsam ist, brauchen Sie oft mehr als einen Einzelspalten-Index.

Ein guter Ausgangspunkt ist ein zusammengesetzter Index, der zu der üblichen Filterkombination passt:

  • (assignee_id, status) für „meine offenen Items"
  • (assignee_id, status, updated_at) wenn die Liste zusätzlich nach Aktivität sortiert wird

Die Reihenfolge ist wichtig in zusammengesetzten Indizes. Stellen Sie Gleichheitsfilter zuerst (oft assignee_id, dann status) und die Sortier- oder Bereichsspalte zuletzt (updated_at). So kann die Datenbank den Index effizient nutzen.

Unzugewiesene Items sind ein häufiger Stolperstein. Viele Systeme repräsentieren „unassigned“ als NULL in assignee_id, und Manager filtern häufig danach. Abhängig von Ihrer Datenbank und dem Abfrageverhalten können NULL-Werte den Plan so ändern, dass ein für zugewiesene Items guter Index für Unzugewiesene nutzlos wirkt.

Wenn unzugewiesen ein wichtiger Workflow ist, wählen und testen Sie eine klare Strategie:

  • assignee_id nullable lassen, aber WHERE assignee_id IS NULL gezielt testen und bei Bedarf indexieren.
  • Einen dedizierten Wert (z. B. speziellen „Unassigned“-User) nutzen, wenn es in Ihr Datenmodell passt.
  • Einen partiellen Index für unzugewiesene Zeilen anlegen, wenn Ihre Datenbank das unterstützt.

Wenn Sie ein Admin-Panel in AppMaster bauen, hilft es, die genauen Filter und Sortierungen zu protokollieren, die Ihr Team am häufigsten nutzt, und diese Muster mit einer kleinen Menge gut gewählter Indizes zu spiegeln, anstatt jede verfügbare Spalte zu indexieren.

Datumsbereiche: Indizes passend zur Filterpraxis

Dort deployen, wo Sie es brauchen
Stellen Sie Ihre Admin-Tools in der Cloud bereit, die Sie nutzen, oder exportieren Sie den Quellcode zur Selbsthostung.
App deployen

Datumsfilter treten meist als schnelle Presets wie „letzte 7 Tage“ oder „letzte 30 Tage“ auf, plus ein individueller Picker mit Start- und Enddatum. Sie wirken simpel, können aber auf großen Tabellen sehr unterschiedliche Datenbankarbeit auslösen.

Zuerst: Seien Sie klar, auf welche Timestamp-Spalte sich die Nutzer wirklich beziehen. Verwenden Sie:

  • created_at für „neue Items“-Ansichten
  • updated_at für „kürzlich geändert“-Ansichten

Legen Sie einen normalen B-Tree-Index auf diese Spalte. Ohne ihn kann jeder „letzte 30 Tage“-Klick in einen Full Table Scan ausarten.

Preset-Bereiche sehen oft so aus: created_at >= now() - interval '30 days'. Das ist eine Bereichsbedingung, und ein Index auf created_at kann effizient genutzt werden. Wenn die UI zusätzlich nach neuesten Einträgen sortiert, kann das Abstimmen der Sortierrichtung (z. B. created_at DESC in PostgreSQL) bei vielgenutzten Listen helfen.

Wenn Datumsbereiche mit anderen Filtern (Status, Bearbeiter) kombiniert werden, seien Sie selektiv. Zusammengesetzte Indizes lohnen sich, wenn die Kombination häufig ist. Andernfalls erhöhen sie nur die Schreibkosten ohne Nutzen.

Praktische Regeln:

  • Wenn die meisten Ansichten zuerst nach Status und dann nach Datum filtern, kann (status, created_at) helfen.
  • Wenn Status optional, Datum aber immer vorhanden ist, belassen Sie es bei einem einfachen created_at-Index und vermeiden Sie viele Kombinationen.
  • Erstellen Sie nicht jede mögliche Kombination. Jeder neue Index erhöht Speicherplatz und verlangsamt Schreibvorgänge.

Zeitzonen und Grenzen verursachen viele „fehlende Datensätze“-Bugs. Wenn Nutzer nur ein Datum (ohne Zeit) wählen, entscheiden Sie, wie das Enddatum interpretiert wird. Ein sicheres Muster ist inklusiver Start und exklusives Ende: created_at >= start und created_at < end_next_day. Speichern Sie Timestamps in UTC und konvertieren Sie Benutzereingaben vor der Abfrage in UTC.

Beispiel: Ein Ops-Admin wählt 10. Jan bis 12. Jan und erwartet Items vom ganzen 12. Jan. Wenn Ihre Abfrage <= '2026-01-12 00:00' verwendet, fallen fast alle Einträge vom 12. Jan heraus. Der Index ist in Ordnung, aber die Grenzlogik falsch.

Textfelder: exakte Suche vs. Contains-Suche

Textsuche ist der Punkt, an dem viele Admin-Panels langsamer werden, weil Nutzer ein Feld erwarten, das „alles findet“. Die erste Abhilfe ist, zwei Bedürfnisse zu trennen: exakter Treffer (schnell und vorhersehbar) vs. Contains-Suche (flexibel, aber schwerer).

Exakte Treffer-Felder sind Bestell-ID, Ticketnummer, E-Mail, Telefon oder externe Referenzen. Diese eignen sich perfekt für normale Datenbankindizes. Wenn Admins oft eine ID oder E-Mail einfügen, macht ein einfacher Index plus Gleichheitsabfrage das Erlebnis instant.

Contains-Suche ist, wenn jemand ein Fragment tippt wie „refund“ oder „john“ und Treffer in Namen, Notizen und Beschreibungen erwartet. Das wird oft mit LIKE %term% umgesetzt. Das führende Wildcard verhindert die Nutzung eines normalen B-Tree-Index, also scannt die Datenbank viele Zeilen.

Praktische Ansätze für Suche, ohne die DB zu überlasten:

  • Machen Sie exakte Suche (ID, E-Mail, Benutzername) erstklassig und klar beschriftet.
  • Für „beginnt mit“-Suche (term%) kann ein Standardindex helfen und ist oft ausreichend für Namen.
  • Fügen Sie Contains-Suche nur hinzu, wenn Logs oder Beschwerden zeigen, dass sie nötig ist.
  • Wenn Sie sie hinzufügen, nutzen Sie das richtige Werkzeug (PostgreSQL Full-Text-Search oder Trigram-Index), statt zu hoffen, ein normaler Index löst LIKE %term%.

Eingaberegeln sind wichtiger, als viele Teams erwarten. Sie reduzieren Last und machen Ergebnisse konsistent:

  • Mindestlänge für Contains-Suche setzen (z. B. 3+ Zeichen).
  • Groß-/Kleinschreibung normalisieren oder immer case-insensitive vergleichen.
  • Führende und folgende Leerzeichen trimmen und wiederholte Leerzeichen zusammenfassen.
  • E-Mails und IDs standardmäßig als exakt behandeln, auch wenn sie in ein allgemeines Suchfeld eingegeben werden.
  • Wenn ein Suchbegriff zu breit ist, fordern Sie den Nutzer auf, genauer zu werden, statt eine riesige Abfrage zu starten.

Kleines Beispiel: Ein Support-Manager sucht „ann“ nach einem Kunden. Wenn das System LIKE %ann% über Notizen, Namen und Adressen laufen lässt, scannt es tausende Datensätze. Prüfen Sie zuerst exakte Felder (E-Mail oder Kunden-ID) und greifen Sie nur bei Bedarf auf eine intelligentere Textsuche zurück.

Ein schrittweises Vorgehen, um Indizes sicher hinzuzufügen

Häufige Filter sofort spürbar machen
Erstellen Sie interne Tools, die Status, Bearbeiter und Datumsfilter mit konsistenter Sortierung kombinieren.
App starten

Indizes sind leicht hinzuzufügen und leicht zu bereuen. Ein sicherer Workflow hält Sie auf die Filter fokussiert, auf die Ihre Admins angewiesen sind, und hilft, „vielleicht nützlich“-Indizes zu vermeiden, die später Schreiboperationen verlangsamen.

Starten Sie mit echter Nutzung. Ziehen Sie die Top-Abfragen in zwei Kategorien:

  • am häufigsten genutzte Abfragen
  • am langsamsten laufende Abfragen

Bei Admin-Panels sind das meist Listen-Seiten mit Filtern und Sortierung.

Erfassen Sie als Nächstes die Abfrageform genau so, wie die Datenbank sie sieht. Notieren Sie das präzise WHERE und ORDER BY, inklusive Sortierrichtung und gängiger Kombinationen (z. B. status = 'open' AND assignee_id = 42 ORDER BY created_at DESC). Kleine Unterschiede können entscheiden, welcher Index hilft.

Nutzen Sie eine einfache Schleife:

  • Wählen Sie eine langsame Abfrage und eine Indexänderung.
  • Fügen Sie einen Index hinzu oder passen Sie ihn an.
  • Messen Sie erneut mit denselben Filtern und derselben Sortierung.
  • Prüfen Sie, ob Einfügungen und Updates spürbar langsamer wurden.
  • Behalten Sie die Änderung nur, wenn sie die Zielabfrage klar verbessert.

Paginierung verdient einen eigenen Check. Offset-basierte Paginierung (OFFSET 20000) wird oft langsamer, je tiefer Sie gehen, selbst mit Indizes. Wenn Nutzer oft sehr tiefe Seiten aufrufen, erwägen Sie Cursor-Paginierung („zeige Items vor diesem Timestamp/ID“), damit der Index konsistent arbeitet.

Behalten Sie abschließend eine kleine Dokumentation, damit Ihre Indexliste Monate später noch verständlich ist: Indexname, Tabelle, Spalten (und Reihenfolge) und die Abfrage, die er unterstützt.

Häufige Indexierungsfehler in Admin-Panels

Vom Prototyp zur Produktion
Erstellen Sie produzierbare Web- und Mobile-Apps mit sauberem, regenerierbarem Quellcode.
Jetzt ausprobieren

Der schnellste Weg, ein Admin-Panel langsam zu machen, ist Indizes hinzuzufügen, ohne zu prüfen, wie Menschen tatsächlich filtern, sortieren und durch Ergebnisse blättern. Indizes kosten Platz und Arbeit bei jedem Insert und Update.

Häufige Fehler

Diese Muster verursachen die meisten Probleme:

  • Jede Spalte „just in case“ indexieren.
  • Zusammengesetzten Index mit falscher Spaltenreihenfolge erstellen.
  • Sortierung und Paginierung ignorieren.
  • Erwarten, dass ein normaler Index LIKE '%term%' behebt.
  • Alte Indizes nach UI-Änderungen nicht entfernen.

Ein häufiges Szenario: Ein Support-Team filtert Tickets auf Status = Open, sortiert nach updated_at und blättert durch Ergebnisse. Wenn Sie nur status indexieren, muss die Datenbank trotzdem alle offenen Tickets sammeln und sortieren. Ein Index, der Filter und Sortierung zusammen abdeckt, kann Seite 1 schnell zurückgeben.

Schnellchecks, um Probleme zu finden

Vor und nach UI-Änderungen machen Sie eine kurze Überprüfung:

  • Listen Sie Top-Filter und die Standard-Sortierung auf und prüfen Sie, ob ein Index das WHERE + ORDER BY-Muster abdeckt.
  • Prüfen Sie auf führende Wildcards (LIKE '%term%') und entscheiden Sie, ob Contains-Suche wirklich nötig ist.
  • Suchen Sie nach doppelten oder sich überschneidenden Indizes.
  • Protokollieren Sie ungenutzte Indizes eine Weile und entfernen Sie sie, wenn sie nicht gebraucht werden.

Wenn Sie Admin-Panels in AppMaster auf PostgreSQL bauen, machen Sie diese Prüfung beim Ausrollen neuer Bildschirme zum Standard. Die richtigen Indizes ergeben sich meist direkt aus den Filtern und Sortierregeln, die Ihre UI nutzt.

Schnelle Checks und nächste Schritte

Bevor Sie weitere Indizes hinzufügen, vergewissern Sie sich, dass die vorhandenen Indizes die genauen Filter unterstützen, die Ihre Leute täglich nutzen. Ein gutes Admin-Panel fühlt sich auf den häufigen Pfaden sofort an, nicht bei seltenen One-off-Suchen.

Einige Checks fangen die meisten Probleme ein:

  • Öffnen Sie die häufigsten Filterkombinationen (Status, Bearbeiter, Datumsbereich und Standard-Sortierung) und bestätigen Sie, dass sie beim Wachsen der Tabelle schnell bleiben.
  • Prüfen Sie für jede langsame Ansicht, ob die Abfrage einen Index nutzt, der sowohl WHERE als auch ORDER BY abdeckt, nicht nur einen Teil.
  • Halten Sie die Indexliste klein genug, dass Sie in einem Satz erklären können, wofür jeder Index da ist.
  • Beobachten Sie schreibintensive Aktionen (Erstellen, Aktualisieren, Statuswechsel). Wenn diese nach dem Indexieren langsamer werden, haben Sie wahrscheinlich zu viele oder überlappende Indizes.
  • Legen Sie fest, was „Suche“ in Ihrer UI bedeutet: exakter Treffer, Prefix oder Contains. Ihr Indexplan muss diese Wahl widerspiegeln.

Ein praktischer nächster Schritt ist, Ihre Goldpfade als einfache Sätze aufzuschreiben, z. B.: „Support-Agenten filtern offene Tickets, mir zugewiesen, letzte 7 Tage, sortiert nach Neuestem.“ Verwenden Sie diese Sätze, um eine kleine Menge Indizes zu entwerfen, die sie klar unterstützen.

Wenn Sie noch früh in der Entwicklung sind, hilft es, Ihre Datenstruktur und Standardfilter zu modellieren, bevor Sie zu viele Bildschirme erstellen. Mit AppMaster (appmaster.io) können Sie Admin-Views schnell iterieren und dann die wenigen Indizes hinzufügen, die aus realer Nutzung als notwendig hervorgehen.

FAQ

What should I index first in an admin panel?

Beginnen Sie mit den Abfragen, die ständig laufen: die Standard-Listenansicht, die Admins zuerst sehen, plus die 2–3 Filter, die sie den ganzen Tag anklicken. Messen Sie Frequenz und Schmerz (häufigste und langsamste Abfragen) und indexieren Sie nur, was die Wartezeit bei diesen genauen Abfrageformen deutlich reduziert.

Why is one filter fast but another painfully slow on the same table?

Weil unterschiedliche Filter unterschiedliche Arbeit erzeugen. Manche Filter schränken das Ergebnis auf wenige Zeilen ein, andere berühren große Bereiche oder erfordern das Sortieren großer Ergebnismengen. Eine Abfrage kann also einen Index gut nutzen, während eine andere trotzdem viel Scannen und Sortieren braucht.

Should I always add an index on a status column?

Nicht immer. Wenn der Großteil der Zeilen denselben Status hat, bringt ein reiner status-Index oft kaum Verbesserung. Ein Index hilft eher, wenn der Status selten ist oder wenn Sie Status zusammen mit der Sortierung oder einem anderen Filter indexieren, der die Ergebnisse wirklich einschränkt.

How do I speed up the common “Open items, newest first” view?

Verwenden Sie einen zusammengesetzten Index, der dem tatsächlichen Verhalten entspricht, z. B. Filter nach Status und Sortierung nach letzter Aktivität. In PostgreSQL kann ein partieller Index eine saubere Lösung sein, wenn ein Status dominiert, weil der Index klein bleibt und die Schreibkosten geringer sind.

What’s the best way to index assignee filtering?

Ein einfacher Index auf assignee_id ist oft ein schneller Gewinn, weil es eine Gleichheitsbedingung ist. Wenn „meine offenen Items“ wichtig ist, ist ein zusammengesetzter Index mit assignee_id zuerst und dann status (und optional der Sortierspalte) meist besser als einzelne Einzelspalten-Indizes.

Why does filtering for “unassigned” items stay slow even after indexing assignee_id?

Unassigned wird häufig als NULL gespeichert, und WHERE assignee_id IS NULL verhält sich anders als WHERE assignee_id = 123. Wenn Unassigned-Queues wichtig sind, testen Sie diese Abfrage gezielt und nutzen Sie bei Bedarf eine Indexstrategie dafür, z. B. einen partiellen Index für unzugewiesene Zeilen, falls Ihre Datenbank das unterstützt.

How should I index date range filters like “last 7 days”?

Legen Sie einen B-Tree-Index auf die Timestamp-Spalte, die Nutzer tatsächlich filtern, typischerweise created_at für „neue Items“ und updated_at für „zuletzt geändert“. Ohne Index kann ein „letzte 30 Tage“-Filter zu einem Full Table Scan werden. Wenn zusätzlich nach neusten Einträgen sortiert wird, kann eine auf die Sortierung abgestimmte Richtung helfen.

How do I avoid timezone and end-date bugs in admin date filters?

Die meisten fehlenden Datensätze kommen von falschen Datumsgrenzen, nicht von Indizes. Ein verlässliches Muster ist inklusiver Start und exklusives Ende: konvertieren Sie Benutzerzeiten in UTC und fragen Sie mit >= start und < end_next_day ab, damit Ereignisse am Enddatum nicht versehentlich ausgelassen werden.

Why doesn’t a normal index fix “contains” search in text fields?

Weil LIKE %term% einen führenden Wildcard hat und ein normaler B-Tree-Index dann nicht verwendet werden kann, was zu vielen Zeilen-Scans führt. Behandeln Sie exakte Nachschläge (ID, E-Mail, Bestellnummer) als erste, schnelle Option, und fügen Sie Contains-Suche nur bei Bedarf mit geeigneten Tools hinzu (z. B. Volltextsuche oder Trigramme in PostgreSQL).

Can I just index every filterable column to avoid slowdowns?

Zu viele Indizes erhöhen Speicherbedarf und verlangsamen Einfügungen und Updates; außerdem hilft ein Index nicht, wenn er nicht zum WHERE + ORDER BY-Muster passt. Ein sicherer Ablauf ist: jeweils nur einen Index ändern, dieselbe langsame Abfrage erneut messen und nur Änderungen beibehalten, die den Hot Path deutlich verbessern.

Wenn Sie Admin-Bildschirme in AppMaster bauen, protokollieren Sie die genauen Filter und Sortierungen Ihres Teams und fügen Sie nur eine kleine Menge an Indizes hinzu, die diese realen Ansichten widerspiegeln, statt jede verfügbare Spalte zu indexieren.

Einfach zu starten
Erschaffe etwas Erstaunliches

Experimentieren Sie mit AppMaster mit kostenlosem Plan.
Wenn Sie fertig sind, können Sie das richtige Abonnement auswählen.

Starten