sql >> Database >  >> RDS >> Sqlserver

Hoe berekent SQL Server het geschatte aantal rijen?

SQL Server splitst elke index in maximaal 200 bereiken met de volgende gegevens (van hier ):

Meestal gaan de meeste ingevulde waarden naar RANGE_HI_KEY .

Ze kunnen echter binnen het bereik komen en dit kan leiden tot scheve verdeling.

Stel je deze gegevens voor (onder andere):

Sleutelwaarde Aantal rijen

1          1
2          1
3          10000
4          1

SQL Server bouwt meestal twee reeksen:1 tot 3 en 4 naar de volgende ingevulde waarde, waardoor deze statistieken:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, wat betekent dat bij het zoeken naar, laten we zeggen, 2 , er is maar 1 rij en het is beter om de indextoegang te gebruiken.

Maar als 3 gaat binnen het bereik, de statistieken zijn deze:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

De optimizer denkt dat er 3334 . zijn rijen voor de sleutel 2 en indextoegang is te duur.



  1. MySQL gebruiken in Flask

  2. Hoe elementen van array in PostgreSQL te verwijderen?

  3. Specifieke postgresql-query loggen met pg-promise

  4. Java Date.toString in TO_DATE van Oracle