sql >> Databáze >  >> RDS >> Sqlserver

Jak SQL server vypočítá odhadovaný počet řádků?

SQL Server rozdělí každý index až na 200 se pohybuje s následujícími údaji (z zde ):

Většina vyplněných hodnot obvykle přechází do RANGE_HI_KEY .

Mohou se však dostat do rozsahu a to může vést ke zkreslení distribuce.

Představte si tyto údaje (mimo jiné):

Hodnota klíče Počet řádků

1          1
2          1
3          10000
4          1

SQL Server obvykle vytváří dva rozsahy:13 a 4 na další naplněnou hodnotu, díky čemuž budou tyto statistiky:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, což znamená, že při hledání, řekněme, 2 , existuje ale 1 řádek a je lepší použít přístup k indexu.

Ale pokud 3 spadá do rozsahu, statistiky jsou tyto:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Optimalizátor si myslí, že existují 3334 řádků pro klíč 2 a přístup k indexu je příliš drahý.



  1. Odstraňování problémů s dlouho běžícími dotazy na MS SQL Server

  2. php data z databáze se po vyhledávání nezobrazí

  3. pohledy oracle a síťový provoz

  4. PostgreSQL přes subsonic