Ja, wenn Sie:
- SQL Server 2014 oder höher ausführen; und
- sind in der Lage, die Abfrage mit aktivem Ablaufverfolgungsflag 176 auszuführen ; und
- Die berechnete Spalte ist
PERSISTED
Insbesondere sind mindestens die folgenden Versionen erforderlich :
- Kumulatives Update 2 für SQL Server 2016 SP1
- Kumulatives Update 4 für SQL Server 2016 RTM
- Kumulatives Update 6 für SQL Server 2014 SP2
ABER um einen in diesen Fixes eingeführten Bug (Ref. Für 2014 und für 2016 und 2017 ) zu vermeiden , gilt Folgendes:
Das Ablaufverfolgungsflag ist als Startoption wirksam –T
, sowohl im globalen als auch im Sitzungsbereich unter Verwendung von DBCC TRACEON
und pro Abfrage mit OPTION (QUERYTRACEON)
oder mit einem Planungsleitfaden.
Das Ablaufverfolgungsflag 176 verhindert eine anhaltende Erweiterung der berechneten Spalten.
Das anfängliche Laden von Metadaten, das beim Kompilieren einer Abfrage ausgeführt wird, enthält alle Spalten, nicht nur die direkt referenzierten. Dies macht alle berechneten Spaltendefinitionen für den Abgleich verfügbar, was im Allgemeinen eine gute Sache ist.
Als unglücklicher Nebeneffekt deaktiviert das Vorhandensein einer der geladenen (berechneten) Spalten eine skalare benutzerdefinierte Funktion die Parallelität für die gesamte Abfrage, auch wenn die berechnete Spalte nicht tatsächlich verwendet wird .
Das Ablaufverfolgungsflag 176 hilft dabei, wenn die Spalte beibehalten wird, indem die Definition nicht geladen wird (da die Erweiterung übersprungen wird). Auf diese Weise ist in der kompilierten Abfragestruktur keine skalare benutzerdefinierte Funktion vorhanden, sodass die Parallelität nicht deaktiviert wird.
Der Hauptnachteil des Ablaufverfolgungsflags 176 (abgesehen davon, dass es nur geringfügig dokumentiert ist) ist, dass es auch verhindert, dass Abfrageausdrücke mit persistierten berechneten Spalten übereinstimmen: Wenn die Abfrage einen Ausdruck enthält, der mit einer persistierten berechneten Spalte übereinstimmt, verhindert das Ablaufverfolgungsflag 176, dass der Ausdruck durch ersetzt wird ein Verweis auf die berechnete Spalte.
Weitere Informationen finden Sie in meinem SQLPerformance.com-Artikel Ordnungsgemäß beibehaltene berechnete Spalten .
Da in der Frage XML als Alternative zum Heraufstufen von Werten mithilfe einer berechneten Spalten- und Skalarfunktion erwähnt wird, können Sie sich auch die Verwendung eines selektiven XML-Index ansehen, wie Sie in Selektive XML-Indizes beschrieben haben: Gar nicht schlecht .