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

Tại sao chọn Điều khoản hàng đầu có thể dẫn đến chi phí thời gian dài

Có các cuộc thảo luận stackoverflow khác về cùng chủ đề này (các liên kết ở dưới cùng). Như đã lưu ý trong các nhận xét ở trên, nó có thể liên quan đến chỉ mục và trình tối ưu hóa bị nhầm lẫn và sử dụng sai.

Suy nghĩ đầu tiên của tôi là bạn đang thực hiện một dịch vụ hàng đầu được chọn từ (select * ....) và trình tối ưu hóa có thể gặp khó khăn khi đẩy truy vấn xuống các truy vấn bên trong và sử dụng chỉ mục.

Cân nhắc viết lại nó thành

select top 10 ServiceRequestID  
from  big_table_1
inner join big_table_2 cap2
on cap1.servicerequestid = cap2.customerreferencenumber
and big_table_1.statusid = 2

Trong truy vấn của bạn, cơ sở dữ liệu có thể đang cố gắng hợp nhất các kết quả và trả lại chúng và SAU ĐÓ giới hạn nó ở top 10 trong truy vấn bên ngoài. Trong truy vấn trên, cơ sở dữ liệu sẽ chỉ phải thu thập 10 kết quả đầu tiên vì các kết quả đang được hợp nhất, tiết kiệm rất nhiều thời gian. Và nếu servicerequestID được lập chỉ mục, nó sẽ chắc chắn sử dụng nó. Trong ví dụ của bạn, truy vấn đang tìm kiếm cột servicerequestid trong tập hợp kết quả đã được trả về ở định dạng ảo, không được lập chỉ mục.

Hy vọng điều đó có ý nghĩa. Mặc dù theo giả thuyết, trình tối ưu hóa phải sử dụng bất kỳ định dạng nào mà chúng tôi đặt SQL vào và tìm ra cách tốt nhất để trả về các giá trị mọi lúc, nhưng sự thật là cách chúng tôi đặt SQL lại với nhau có thể thực sự tác động đến thứ tự thực hiện các bước nhất định trên DB.

CHỌN HÀNG ĐẦU chậm, bất kể ĐƠN HÀNG THEO

Tại sao phần trên cùng (1) trên cột được lập chỉ mục trong SQL Server chậm?



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng OBJECTPROPERTY () để Tìm hiểu xem một Đối tượng có phải là Ràng buộc KIỂM TRA trong SQL Server hay không

  2. Chèn hàng loạt Sql Server hàng triệu bản ghi

  3. Cách chuyển đổi giá trị ngày / giờ thành chuỗi trong SQL Server bằng CONVERT ()

  4. Giám sát truy vấn chạy SQL Server

  5. Cách xóa khoảng trắng theo sau trong SQL Server - RTRIM ()