Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak serwer SQL oblicza szacowaną liczbę wierszy?

SQL Server dzieli każdy indeks na maksymalnie 200 zakresy z następującymi danymi (z tutaj ):

Zwykle większość wypełnianych wartości trafia do RANGE_HI_KEY .

Mogą jednak dostać się do zasięgu, a to może prowadzić do przekrzywienia dystrybucji.

Wyobraź sobie te dane (między innymi):

Wartość klucza Liczba wierszy

1          1
2          1
3          10000
4          1

SQL Server zwykle buduje dwa zakresy:1 do 3 i 4 do następnej wypełnionej wartości, co powoduje, że te statystyki:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, co oznacza podczas wyszukiwania, powiedzmy, 2 , jest tylko 1 wiersz i lepiej użyć dostępu do indeksu.

Ale jeśli 3 wchodzi w zakres, statystyki są następujące:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Optymalizator uważa, że ​​istnieje 3334 wiersze dla klucza 2 a dostęp do indeksu jest zbyt drogi.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Profiler serwera SQL nie wyświetla zapytań LINQ To Sql

  2. Dla pól autoinkrementacji:MAX(ID) vs TOP 1 ID ORDER BY ID DESC

  3. Coś jak subskrypcje oparte na danych SSRS Standard Edition 2008

  4. Nie można powiązać wieloczęściowego identyfikatora - SubQuery

  5. Jak zainstalować SQL Server na komputerze Mac