Frage

Ich erstelle selten (monatlich/vierteljährlich) Hunderte von Crystal Reports-Berichten mithilfe von Microsoft SQL Server 2005-Datenbankansichten.Verschwenden diese Ansichten CPU-Zyklen und RAM, während ich nicht von ihnen lese?Sollte ich stattdessen gespeicherte Prozeduren, temporäre Tabellen oder kurzlebige normale Tabellen verwenden, da ich selten aus meinen Ansichten lese?

Ich bin kein DBA und weiß daher nicht, was hinter den Kulissen im Datenbankserver vor sich geht.

Ist es möglich, zu viele Datenbankansichten zu haben?Was gilt als Best Practice?

War es hilfreich?

Lösung

Im Großen und Ganzen spielt es keine Rolle.Ja, SQL Server hat mehr Auswahlmöglichkeiten, wenn es die SELECT * FROM-Tabelle analysiert (es muss in den Systemkatalogen nach „Tabelle“ suchen), aber es ist dafür stark optimiert und vorausgesetzt, Sie verfügen über ausreichend RAM (die meisten Server heutzutage tun dies). , werden Sie keinen Unterschied zwischen 0 und 1.000 Aufrufen bemerken.

Aus menschlicher Sicht ist es jedoch wahrscheinlich unmöglich, zu verwalten und herauszufinden, was „Hunderte“ von Ansichten tun, sodass Sie wahrscheinlich eine Menge doppelten Code darin haben.Was passiert, wenn sich einige Geschäftsregeln ändern, die in diesen redundanten Ansichten eingebettet sind?

Der Hauptpunkt der Ansichten besteht darin, die Geschäftslogik in einer Pseudotabelle zu kapseln (Sie haben also möglicherweise eine Personentabelle, aber dann eine Ansicht namens „active_persons“, die etwas Wunderbares bewirkt).Für jeden Bericht eine Ansicht zu erstellen, ist ziemlich albern, es sei denn, jeder Bericht ist so isoliert und einzigartig, dass er nicht wiederverwendet werden kann.

Andere Tipps

Eine Ansicht ist eine Abfrage, die Sie häufig mit voreingestellten Parametern ausführen.Wenn Sie wissen, dass Sie ständig dieselben Daten betrachten, können Sie zur einfacheren Verwendung und zur Datenbindung eine Ansicht erstellen.

Wenn Sie jedoch aus einer Ansicht auswählen, wird die Abfrage, die die Ansicht definiert, zusammen mit der Abfrage ausgeführt, die Sie gerade ausführen.

Wenn vwCustomersWhoHavePaid beispielsweise lautet:

Select * from customers where paid = 1

und die Abfrage, die Sie ausführen, gibt die Kunden zurück, die nach dem 1. August bezahlt haben, und hat das folgende Format:

Select * from vwCustomersWhoHavePaid where datepaid > '08/01/08'

Die Abfrage, die Sie tatsächlich ausführen, lautet:

Select * from (Select * from customers where paid = 1) where datepaid > '08/01/08'

Dies sollten Sie beim Erstellen von Ansichten berücksichtigen. Sie stellen eine Möglichkeit dar, Daten zu speichern, die Sie häufig betrachten.Es handelt sich lediglich um eine Möglichkeit, Daten so zu organisieren, dass sie leichter zugänglich sind.

Die Ansichten beanspruchen nur dann CPU-/Speicherressourcen, wenn sie aufgerufen werden.

Die beste Vorgehensweise wäre jedenfalls, zu konsolidieren, was konsolidiert werden kann, und zu entfernen, was entfernt werden kann, und wenn es buchstäblich nur von Ihren Berichten verwendet wird, einen einheitlichen Benennungsstandard für die Ansichten zu wählen, damit sie bei der Suche nach einer bestimmten Ansicht problemlos gruppiert werden können .

Sofern Sie keine Transaktionsisolierung wirklich benötigen, sollten Sie darüber hinaus die Verwendung des NOLOCK-Tabellenhinweises in Ihren Abfragen in Betracht ziehen.

– Kevin Fairchild

Du fragst:Was passiert hinter den Kulissen?

Eine Ansicht ist eine Menge SQL-Text.Wenn eine Abfrage eine Ansicht verwendet, fügt SQL Server diesen SQL-Text in die Abfrage ein.Dies geschieht VOR der Optimierung.Das Ergebnis ist, dass der Optimierer für den besten Ausführungsplan den kombinierten Code anstelle von zwei separaten Codeteilen berücksichtigen kann.

Sie sollten sich die Ausführungspläne Ihrer Anfragen ansehen!Da gibt es so viel zu lernen.

SQL Server verfügt auch über ein Konzept von a Clusteransicht.A Clusteransicht ist eine vom System verwaltete Ergebnismenge (jede Einfügung/Aktualisierung/Löschung in den zugrunde liegenden Tabellen kann zu Einfügungen/Aktualisierungen/Löschvorgängen in der Tabelle führen). Clusteransicht's Daten).Es ist ein häufiger Fehler zu glauben, dass Ansichten auf diese Weise funktionieren gruppierte Ansichten arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top