Frage

Im Versuch, einen Blick aus einem recht komplexen Auswahlabfrage zu erstellen und es mich nicht einen gruppierten Index auf sie lassen setzen, weil ich Unterabfragen und einige Aggregatfunktionen verwenden.

Ich muss einen gruppierten Index auf sie sonst die Abfragen, die die Ansicht verwenden ewig dauern wird. Anscheinend SQL Server das Ergebnis nur speichern gesetzt, wenn u eine dumme Menge von Kriterien erfüllen.

Die Basistabellen für die Ansicht sind schreibgeschützt und nur durch einen Bulk-Import aktualisiert werden einmal pro Tag. Ich kann nicht sehen, warum die Ergebnisse nicht im Cache gespeichert werden.

Kennt jemand irgendeine Weise SQL-Server zu erhalten, die Ergebnisse im Hinblick auf den zwischenspeichern, so dass sie wiederum später abgefragt werden ?? Ich will nicht wirklich eine andere Tabelle cos schaffen, die in eine Reihe von Änderungen in dem ganzen Ort Schneeball würde.

Vielen Dank im Voraus.

War es hilfreich?

Lösung

Ich denke, die Antwort, die Sie suchen ist: Verwenden Sie keine Ansicht, dies zu tun. Verwenden Sie eine Tabelle mit den Feldern corresonding zu den zurückgegebenen Felder bilden die SQL-Abfrage. Automatisieren Sie die Abfrage dieser Tabelle zu füllen

Andere Tipps

Die kurze Antwort ist, dass ein Clustered-Index kann nicht wegen der Gründe erwähnen Sie erstellt werden.

Wenn Sie nach einem Weg stellen die Ergebnisse des komplizierten Abfrage-Cache, die einzige andere Objekt, das SQL Server bietet (und wird Ihr Problem lösen) ist eine Tabelle.

Wenn Automatisierung ein Problem ist, sollten Sie die Ansicht erstellen, sondern nur als eine Möglichkeit, mit ihm in eine Tabelle einfügen, so dass Sie ein truncate tun können / Einfügen in die Tabelle (aus der Sicht der Auswahl) unmittelbar nach dem Masseneinsatz.

Wenn Sie SSIS (SQL Server Integration Services) ist dies eine relativ triviale Sache hinzuzufügen.

Soweit ich bin mir dessen bewusst, wenn die Ausführung Pläne entwickelt SQL Server im Wesentlichen kopiert und fügt die Definition des Blicks in die Abfrage seiner Compilierung - solange Sie in der Lage sind Indizes zu den zugrundeliegenden Tabellen hinzuzufügen, sollte es möglich sein, erhält gute Leistung aus der Abfrage.

Was Sie bauen klingen wie ein Data Warehouse, damit Ihre beste Möglichkeit ist, um die Daten zu manipulieren, wenn es im System vorhanden ist. Sie können neue Tabellen denormalised bauen (oder wie immer Sie es modifizieren) und indizieren sie schnell Abfragen zu ermöglichen.

Sie können dann Aussicht auf diesen Tabellen erstellen, wenn Sie müssen.

, wenn Aggregate in einer indizierten Sicht verwenden Sie benötigen COUNT_BIG () anstelle von COUNT () sonst die Sicht nicht erstellt werden, verwenden,

Auch wenn Sie nicht auf Enterprise Edition sind, müssen Sie den NOEXPAND Hinweis auf etwas anderes der Optimierer wird die Ansicht nicht verwenden

SELECT *
FROM YourView WITH(NOEXPAND)
WHERE ....

Vielleicht brauchen Sie keine Aussicht, aber Sie haben einfach nicht th richtigen Indizes für die Tabellen, können Sie die DDL der Tabellen (einschließlich Indizes und Constraints)

Post

Ich hatte das gleiche Problem und schließlich setzen die Unterabfragen in Clustered-Index betrachtet selbst.

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