select TABELLE vs record(oberTabelle,Nr).TABELLE
Hallo,
Andy von Nioxus propagiert, dass man die DB-Struktur so anlegt, dass man komplett select-Befehle meidet. Hierzu führt er Oberkategorien ein (siehe z.B. Anhang die roten Felder). Dies sind Tabellen, die jeweils nur einen Datensatz besitzen. Die untergeordneten Tabellen der ersten Ebene sind mit diesem einem Datensatz verknüpft. Statt ein
select Extern where ...
skriptet man dann
record(Kreditor,1).Extern where ...
Mir ist nicht ganz klar, wieso dadurch so viel an Performance gewonnen wird. Mit dem zweiten Vorgehen muss doch ebenfalls die Tabelle "Extern" komplett eingelesen werden.
Danke für die Einsichten in den "Maschinenraum" von Ninox.
Maurice

3 Antworten
-
Der Hauptunterschied besteht darin, dass sich die Formelfelder, zu den die select Abfragen gehören, alle x (glaube 30) Sekunden und nach jeder Eingabe von irgendeinem Benutzer datenbankweit aktualisieren.
Deinen code: record(Kreditor,1).Extern where ... hängst du an irgendeinen Trigger dran und aktualisierst den nur dann, wenn es nötig ist. Mit einem Button oder beim Wechsel von Registerkarten. Damit werden unnötige Berechnungen auf dem Server vermieden. Das Problem mit der dauernden Aktualisierung steigt mit mehreren Usern exponentiell.
Kannst ja in deinem Browser die Entwicklerkonsole und dann die Netzwerkeinstellungen öffnen und schauen, was Ninox im Hintergrund "treibt".
-
said:
record(Kreditor,1).Extern where ...Der Code mit "where" dürfte so eigentlich gar nicht funktionieren ("where" immer in Verbindung mit "select"). Wenn, dann müsste die Bedingung m. E. in eckige Klammern gesetzt werden, z. B. so:
record(Kreditor, 1).Extern[FELD = "XY"]Das könnte zwr funktioniereb, allerdings kann ich mir auch nicht vorstellen, dass das nennenswerte Performance-Verbesserung bringt.
Content aside
-
1
„Gefällt mir“ Klicks
- vor 3 TagenZuletzt aktiv
- 3Antworten
- 52Ansichten
-
4
Folge bereits
