Best Practices
Bei den folgenden Best Practices handelt es sich um zentrale Empfehlungen, die sich im Umgang mit der Plattform als besonders wirkungsvoll erwiesen haben. Sie adressieren typische Schwachstellen wie ineffiziente Datenzugriffe, unerwünschte Trigger-Kaskaden und schleifenintensive Berechnungen. Durch konsequente Anwendung dieser Hinweise lassen sich Ladezeiten reduzieren und Systemressourcen schonen.
Ansichten bei großen Tabellen optimieren
Wenn Sie mit großen Tabellen arbeiten, filtern Sie die erste Ansicht so, dass nur ein relevanter Ausschnitt der Datensätze angezeigt wird – idealerweise nur die wirklich benötigten. Dies reduziert die Ladezeit erheblich und sorgt für eine bessere Benutzererfahrung.
- Konflikte und Zirkelbezüge bei Triggern vermeiden
Stellen Sie sicher, dass Trigger unabhängig voneinander funktionieren und sich nicht gegenseitig beeinflussen. Vermeiden Sie insbesondere Konfigurationen, die zu Zirkelbezügen oder ungewollten Trigger-Schleifen führen.
- Select-Anweisungen gezielt einsetzen
Verwenden Sieselect
-Anweisungen nur dann, wenn es keine effizientere Alternative gibt. Wenn eine Verknüpfung zur Zieltabelle bereits besteht, nutzen Sie diese. Bei Untertabellen (wenn die Untertabelle direkt und ohne ein select aufgerufen wird) muss die Bedingung stets in eckigen Klammern notiert werden, da ein where beim direkten Aufruf der Untertabelle nicht zur Verfügung steht. Zum Beispiel:sum((Rechnungspositionen[Artikeltyp = 2].Gesamt)
Vermeiden Sie, das folgenden Skript, da die Zuordnung der Rechnungspositionen zur Rechnung bereits automatisch über die Untertabelle erfolgt, so wie oben: let me:=this; sum((select Rechnungspositionen where Rechnung= me and Artikeltyp = 2).Gesamt)
- Select-Anweisungen in Funktionsfeldern vermeiden
Vermeiden Sieselect
-Anweisungen in Funktionsfeldern, die in Tabellen- oder Formularansichten angezeigt werden. Falls doch notwendig, verwenden Sie diewhere
-Klausel anstelle von eckigen Klammern ([ ... ]
) für Bedingungen – das verbessert Übersichtlichkeit und Performance.
- Select-Ergebnisse wiederverwenden
Führen Sie eineselect
-Anweisung innerhalb eines Skripts nur einmal aus und speichern Sie das Ergebnis in einer Variablen. Greifen Sie anschließend über diese Variable auf die benötigten Felder zu – so vermeiden Sie Mehrfachzugriffe auf die Datenbank.
- Select-Anweisungen in verschachtelten Schleifen vermeiden
Vermeiden Sieselect
-Anweisungen innerhalb verschachtelter Schleifen. Wiederholte Datenbankzugriffe in Schleifen führen zu schlechter Performance.
- Statische Werte statt dynamischer Berechnung verwenden
Formeln sollten nicht bei jeder Anzeige neu berechnet werden, wenn der Wert sich selten ändert. In solchen Fällen ist es besser, den Wert per Trigger einmalig in ein Datenfeld zu schreiben – das spart Rechenleistung und beschleunigt das System.
- Effiziente Suchen aus Dashboard-Formularansichten
Wenn eine Formularansicht als Dashboard genutzt wird, definieren Sie alle Suchparameter zuerst mitlet
und führen Sie anschließend eine gezielteselect
-Abfrage aus. Begrenzen Sie das Ergebnis z. B. auf 100 Datensätze, um unnötige Datenmengen zu vermeiden. Leere Suchfelder sollten Sie mit demnot
-Befehl korrekt behandeln. Beispiel:let mySearch := 'Projekt suchen'; select Projekte where (not mySearch or Projektname + concat ('Projekt Mitarbeiter'. 'Person auswählen'
Große Texte nicht in Textfeldern speichern
Vermeiden Sie die Speicherung großer Inhalte – wie CSV-Dateien für Importe oder JSON-Payloads für API-Aufrufe – direkt in Textfeldern. Da Ninox jede Änderung protokolliert, kann dies die Änderungshistorie unnötig aufblähen.
Besser ist es, solche Inhalte mitcreateTextFile()
als Anhang zu erzeugen und bei Bedarf über die API darauf zuzugreifen.
Indizierung gezielt nutzen
Verwenden Sie Indizes nur für Felder, die sehr viele unterschiedliche Werte aufweisen und die tatsächlich häufig durchsucht oder gefiltert werden. Bei Felder mit wenigen möglichen Werten (z. B. Ja/Nein) ist das Setzen eines Index' nicht sinnvoll, weil unwirksam und kann sogar zur Verlangsamung der Suche führen. Auch das Setzen des Index and sehr vielen oder sogar alle Feldern einer Tabelle kann diesen gegenteiligen Effekt verursachen, weshalb nur ausgewählte Felder indiziert werden sollten (siehe oben im Absatz).
In Tabellen, in denen regelmäßig Datensätze gelöscht werden, empfiehlt es sich, die Indizes gelegentlich über die Datenbankoptionen zurückzusetzen.