For the complete documentation index, see llms.txt. This page is also available as Markdown.

Indexiere Felder um Filtern und Suche zu beschleunigen

Erfahre, wie du Indizes in Ninox nutzt und die Performance großer Apps sicherst.

Indizes helfen Ninox, passende Datensätze zu finden, ohne eine ganze Tabelle zu durchsuchen. Abfragen können ganze Tabellen wiederholt durchsuchen, auch wenn sie nur wenige Ergebnisse liefern. Das beeinflusst die Performance einer App und ihrer Cloud-Umgebung.

Das passiert oft, wenn:

  • eine Tabelle 20.000 oder mehr Datensätze enthält

  • eine Abfrage regelmäßig und sehr oft läuft

  • das gefilterte Feld keinen Index hat

Die Auswirkungen nehmen zu, wenn mehrere Nutzer diese Abfragen gleichzeitig ausführen.

Index für ein Feld aktivieren

Du kannst die Indizierung unter Verhalten in den Einstellungen des Felds aktivieren. Weitere Details findest du unter Gemeinsame Feldeinstellungen.

Dadurch entsteht eine Suchstruktur, mit der die Datenbank Datensätze effizient findet.

Wann du Indizierung verwendest

Indexiere ein Feld, wenn alle folgenden Bedingungen zutreffen:

  • Die Tabelle enthält Tausende Datensätze.

  • Das Feld wird in where-Bedingungen verwendet.

  • Die Abfrage läuft häufig in Ansichten, Dashboards, Skripten oder Automatisierungen.

Die Tabelle "Aufgaben" ist beispielsweise groß und wird häufig für Dashboards abgefragt. Jede Aufgabe hat einen eindeutigen Code im Feld "Referenz". Ein Feld "SearchReference" liefert den gesuchten Wert.

Das Indizieren des Felds "Referenz" verbessert diese Abfrage. Felder mit eindeutigen Werten sind gute Kandidaten. Ein Auswahlfeld enthält meist wiederkehrende Werte. Das verringert den Nutzen eines Index.

Verwende für Dashboards in großen Apps mit mehreren Nutzern auch clientseitige select-Statements.

Wann du Indizierung vermeiden solltest

Indexiere nicht jedes Feld. Indizes benötigen zusätzlichen Speicher und Arbeitsspeicher. Sie erhöhen auch die Zeit zum Schreiben von Datensätzen.

Vermeide Indizierung in folgenden Fällen:

  • Die Tabelle ist klein oder das Feld wird selten gefiltert.

  • Die Abfrage läuft nicht häufig.

  • Die meisten Datensätze haben denselben Wert.

  • Das Feld hat wenige mögliche Werte, etwa ein Ja/Nein Feld.

Wie Indizierung die Performance verbessert

Betrachte diese Abfragen:

Ohne Index prüft Ninox jeden Datensatz gegen die Bedingung. Bei einer Tabelle mit 20.000 Datensätzen sind das 20.000 Auswertungen pro Abfrage. Wenn die Abfrage 5.000 Mal läuft, sind das 100 Millionen Auswertungen.

Mit einem Index sucht Ninox den Wert, ruft passende Datensatz-IDs ab und lädt nur diese Datensätze. Das reduziert die Anzahl der Datensätze, die Ninox durchsuchen muss.

Anforderungen für die Verwendung eines Index

Das Erstellen eines Index reicht nicht aus. Die Abfrage muss alle folgenden Anforderungen erfüllen:

  • Verwende das indizierte Feld direkt. Wende keine Funktion darauf an und referenziere es nicht über ein Logikfeld.

  • Verwende =, >, >=, < oder <=.

  • Vergleiche das Feld mit einem Literal oder einer let-Variable. Vergleiche es nicht direkt mit einem anderen Feld oder einem berechneten Wert.

Der Suchwert muss vor Beginn der Suche verfügbar sein. Eine Variable wird vor der Suche einmal ausgewertet. Eine Feldreferenz kann sich für jeden durchsuchten Datensatz ändern. Ninox kann den Index dann nicht verwenden.

Diese Abfrage verwendet den Index:

Diese Abfrage verwendet den Index nicht:

Die indizierte Bedingung muss die erste Bedingung in select sein und für sich allein stehen. Wende weitere Bedingungen auf das select-Ergebnis an.

Beispiele für Abfragen

Funktionen verhindern die Indizierung

Das Anwenden einer Funktion auf ein indiziertes Feld verhindert die Verwendung des Index:

Ninox muss alle Datensätze durchsuchen, weil das Feld nicht direkt verwendet wird.

Separate Verzweigungen statt or verwenden

Eine or-Bedingung verhindert die Verwendung eines Index:

Verwende für jedes Kriterium eine eigene Verzweigung:

Zusätzliche Bedingungen nach dem indizierten select anwenden

Ein select mit kombinierten Bedingungen durchsucht die ganze Tabelle. Er kann keinen Index verwenden, auch wenn feld1 indiziert ist:

Wenn ein Kriterium ein indiziertes Feld verwendet, nutze diese Bedingung allein in select. Filtere dann das Ergebnis:

not c1 behandelt auch 0 als fehlende Bedingung. Prüfe dieses Verhalten bei numerischen Kriterien oder Auswahlkriterien.

Einen Bereich für die Präfixsuche verwenden

Zwei Bedingungen für dasselbe indizierte Feld mit >= und <= erstellen einen Bereichsscan. Berechne die Obergrenze in einer Variablen:

Indizes nicht für die Substring-Suche verwenden

Indizes ordnen Werte ab ihrem ersten Zeichen. Sie können einen vollständigen Wert oder ein Präfix finden. Sie können keinen Text innerhalb eines Werts finden.

contains() und like verwenden nie einen Index. Speichere Werte stattdessen in einem sauberen, normalisierten Format. Verwende einen Wert pro indiziertem Feld und suche mit =.

Selects in Logikfeldern vermeiden

Ein select in einem Logikfeld läuft erneut, wenn du es liest. Es läuft auch, wenn sich ein Datensatz in der abgefragten Tabelle ändert. do as server entscheidet nur, wo die Abfrage läuft. Es ändert nicht, wie oft sie läuft.

Setze die Bedingung direkt in den select. Filtere ein Ergebnis aus einem Logikfeld nicht im Speicher.

Zuletzt aktualisiert

War das hilfreich?