Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm cách nào để máy chủ SQL tính ra số hàng ước tính?

SQL Server chia từng chỉ mục thành tối đa 200 phạm vi với dữ liệu sau (từ tại đây ):

Thông thường, hầu hết các giá trị được điền vào RANGE_HI_KEY .

Tuy nhiên, chúng có thể đi vào phạm vi và điều này có thể dẫn đến sự sai lệch trong phân phối.

Hãy tưởng tượng những dữ liệu này (trong số những dữ liệu khác):

Giá trị chính Số lượng hàng

1          1
2          1
3          10000
4          1

SQL Server thường xây dựng hai phạm vi:1 thành 34 sang giá trị được điền tiếp theo, giá trị này tạo nên những thống kê sau:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
3             2           10000    1               2

, có nghĩa là khi tìm kiếm, chẳng hạn, 2 , có nhưng 1 hàng và tốt hơn là sử dụng quyền truy cập chỉ mục.

Nhưng nếu 3 bên trong phạm vi, các số liệu thống kê là:

RANGE_HI_KEY  RANGE_ROWS  EQ_ROWS  AVG_RANGE_ROWS  DISTINCT_RANGE_ROWS
4             10002       1        3334            3

Trình tối ưu hóa cho rằng có 3334 hàng cho khóa 2 và quyền truy cập chỉ mục quá đắt.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đảo ngược / thổi bay một NHÓM BẰNG

  2. Tôi không chắc có gì sai khi khai báo các biến này trong SQL

  3. LINQ2SQL - Kết nối chéo được phát ra khi tôi muốn tham gia bên trong

  4. Cách thêm tệp dữ liệu vào cơ sở dữ liệu máy chủ SQL (T-SQL)

  5. Sự cố về quyền khi chạy gói SSIS từ Sql Job