Wir haben ein System, das eine Datenbank View verwendet, die Daten aus einigen Referenztabellen (Lookups) nimmt und dann viel Pivotieren und komplexe Arbeit an einer Hierarchietabelle von (ziemlich viel feste und statische) Standorte, die eine Ansicht der Daten an die Anwendung zurückgeben.Generated de-normalisiert View-Tabelle
Diese Ansicht wird langsam, da neue Anforderungen hinzugefügt werden.
Eine Lösung, die eine Option wäre, würde eine normale Tabelle zu erstellen, und wählen Sie aus der Ansicht in diese Tabelle, und lassen Sie die Anwendung diese hoch indizierte und schnelle Tabelle für die Abfrage verwenden.
Problem ist, ich denke, wenn die zugrunde liegenden Tabellen ändern, zeigt die neue Tabelle alte Ergebnisse. Aber die Daten, die diese Tabelle steuern, ändern sich sehr selten. Und wenn dies der Fall ist, könnte ein geschäftlicher/technischer Prozess durchgeführt werden, der bedeutet, dass eine Aktualisierung der Tabelle ausgeführt wird, um diese Daten zu aktualisieren. Oder sogar einen Aktualisierungs-/Einfüge-Trigger auf dem primären Fahrtisch?
Ist diese Praxis ratsam/schlecht beraten? Und gibt es Möglichkeiten, es sicherer zu machen?
Sie können sich das als Caching vorstellen. Ich aktualisiere/aktualisiere eine Tabelle/einen Cache mit dem Ergebnis einer komplexen Abfrage alle paar Minuten, so dass Benutzer Daten sehen, die wenige Minuten alt sind. Es kann für Sie akzeptabel sein. Sehen Sie sich auch [indizierte Sichten] an (https://msdn.microsoft.com/en-AU/library/ms191432.aspx). Aber sie haben eher [strenge Beschränkungen] (https://www.brentozar.com/archive/2013/11/what-you-can-and-cant-do-with-indexed-views/). –
Danke @VladimirBaranov - Das ist hilfreich. Ich wollte indizierte Ansichten verwenden, aber da ich ein Pivot innerhalb der Ansicht oder innerhalb einer von der Ansicht verwendeten Funktion ausführen muss, überschreite ich die Einschränkungen. Meine einzige Option scheint die zwischengespeicherte Tabelle zu sein. – Craig