Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как SQL сървърът изчислява приблизителния брой редове?

SQL Server разделя всеки индекс на до 200 диапазони със следните данни (от тук ):

Обикновено повечето попълнени стойности влизат в RANGE_HI_KEY .

Те обаче могат да попаднат в обхвата и това да доведе до изкривяване в разпространението.

Представете си тези данни (наред с другите):

Ключова стойност Брой редове

1          1
2          1
3          10000
4          1

SQL Server обикновено изгражда два диапазона:1 до 3 и 4 към следващата попълнена стойност, което прави тези статистики:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, което означава когато търсите, да речем, 2 , има само 1 ред и е по-добре да използвате индексния достъп.

Но ако 3 влиза в диапазона, статистиката е следната:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Оптимизаторът смята, че има 3334 редове за ключа 2 и достъпът до индекс е твърде скъп.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Получаване и инсталиране на Microsoft SQL Server Management Studio

  2. Първи стъпки със SQL Server 2017 на Linux в портала Azure

  3. Как да изпратите множество команди към SQL Server 2008 с едно отиване и връщане

  4. Изтриването не се поддържа от източника на данни „SqlDataSource1“, освен ако не е указана DeleteCommand

  5. Как да вмъкнете низ в друг низ в SQL Server с помощта на STUFF()