Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Wie berechnet SQL Server die geschätzte Anzahl von Zeilen?

SQL Server teilt jeden Index in bis zu 200 auf reicht mit den folgenden Daten (von hier). ):

Normalerweise gehen die meisten eingetragenen Werte in RANGE_HI_KEY .

Sie können jedoch in den Bereich gelangen und dies kann zu einer Schiefe in der Verteilung führen.

Stellen Sie sich diese Daten vor (unter anderem):

Schlüsselwert Anzahl der Zeilen

1          1
2          1
3          10000
4          1

SQL Server bildet normalerweise zwei Bereiche:1 bis 3 und 4 zum nächsten gefüllten Wert, der diese Statistik erstellt:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, d. h. bei der Suche nach beispielsweise 2 , es gibt aber 1 Zeile und es ist besser, den Indexzugriff zu verwenden.

Aber wenn 3 innerhalb des Bereichs liegt, lauten die Statistiken:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Der Optimierer denkt, dass es 3334 gibt Zeilen für den Schlüssel 2 und der Indexzugriff ist zu teuer.