sql >> Databasteknik >  >> RDS >> Sqlserver

Hur räknar SQL-server ut det uppskattade antalet rader?

SQL Server delar upp varje index i upp till 200 intervall med följande data (från här ):

Vanligtvis går de flesta ifyllda värdena in i RANGE_HI_KEY .

De kan dock komma in i intervallet och detta kan leda till skevhet i distributionen.

Föreställ dig dessa data (bland de andra):

Nyckelvärde Antal rader

1          1
2          1
3          10000
4          1

SQL Server bygger vanligtvis två intervall:1 till 3 och 4 till nästa ifyllda värde, vilket gör denna statistik:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, vilket betyder när du söker efter, säg, 2 , det finns bara 1 rad och det är bättre att använda indexåtkomsten.

Men om 3 går inom intervallet, är statistiken följande:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Optimeraren tror att det finns 3334 rader för nyckeln 2 och indexåtkomst är för dyrt.



  1. Grails transaktion setSavePoint-metoden på mysql orsakar undantag

  2. fatalt fel påträffades under kommandoexekvering under uppdatering

  3. Konfiguration med hög tillgänglighet för ClusterControl-noder med CMON HA

  4. Ersätter matchad text med regex med versaler i Postgresql