sql >> Database teknologi >  >> RDS >> Sqlserver

Hvordan beregner SQL-server det anslåede antal rækker?

SQL Server opdeler hvert indeks i op til 200 områder med følgende data (fra her ):

Normalt går de fleste udfyldte værdier ind i RANGE_HI_KEY .

De kan dog komme ind i området, og det kan føre til skævhed i fordelingen.

Forestil dig disse data (blandt de andre):

Nøgleværdi Antal rækker

1          1
2          1
3          10000
4          1

SQL Server opbygger normalt to områder:1 til 3 og 4 til den næste udfyldte værdi, hvilket gør disse statistikker:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, hvilket betyder, når du søger efter f.eks. 2 , der er kun 1 række, og det er bedre at bruge indeksadgangen.

Men hvis 3 går inden for området, er statistikken disse:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Optimizeren mener, at der er 3334 rækker for nøglen 2 og indeksadgang er for dyr.



  1. Sådan migreres fra Oracle DB til MariaDB

  2. Hvordan SYS_GUID() virker i MariaDB

  3. LOAD DATA INFIL med variabler

  4. Konverter BufferedInputStream til billede