2017-09-01 1 views
0

Wie ich verstehe, schätzt SQL Server Kardinalität basierend auf Stichproben von Tabellendaten. Wir haben einen täglichen Zahlungsabstimmungsbericht, der zeitweise einen schlechten Ausführungsplan generiert.Gibt es eine Möglichkeit, SQL Server zu zwingen, Beispiele für aktuelle Daten in einer Abfrage zu verwenden?

Von dem, was ich sagen kann, ist dies zum Teil aufgrund der schlechten Kardinalität Schätzungen in den Plänen. Ich frage mich, ob es eine Möglichkeit gibt, eine Abfrage zu zwingen, die Beispiele zu generieren, die es verwendet, um Kardinalitätsschätzungen mit einer Neigung zu kürzlich eingefügten/aktualisierten Zeilen oder höheren numerischen Primärschlüsseln (aka jünger) zu machen.

Wenn es eine Möglichkeit gibt, dies auf Tabellenebene oder Datenbankebene zu tun, würde mich das auch interessieren.

+2

Verwenden Sie Optionen, um SQL Server zur Erstellung des besten Plans zu führen. –

+0

https://docs.microsoft.com/en-us/sql/t-sql/queries/option-clause-transact-sql – scsimon

+1

Sind die Indexstatistiken veraltet? – HABO

Antwort

2

Werfen Sie einen Blick auf "Parameter Sniffing" und die OPTIMIZE FOR-Funktion in SQL. Sie können die Art und Weise optimieren, wie SQL einen Abfrageplan für wiederverwendeten, variablen Code (Ansichten, TVFs usw.) generiert:

SELECT * 
FROM ImportLog 
WHERE StateCode = @StateCode 
OPTION(OPTIMIZE FOR (@StateCode = 'CA')); 
Verwandte Themen