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

Tại sao câu lệnh Sql này (với 2 phép nối bảng) mất 5 phút để hoàn thành?

Điều này không đúng.

Tôi có hai khả năng:

1) Số liệu thống kê đã lỗi thời trên các bảng. Tạo lại chỉ mục và cập nhật số liệu thống kê.

2) Như bạn đã nói, bản ghi của bảng Địa lý rất lớn kéo dài nhiều trang (không phải bản ghi kéo dài nhiều trang vì nó không thể nhưng bản ghi gần đến mốc 8K). Trong trường hợp này, thật buồn cười, việc tạo một chỉ mục không phân cụm khác trên chỉ mục được phân nhóm có thể hữu ích.

CẬP NHẬT

Tôi hài lòng vì nó đã hoạt động. Bây giờ là một số giải thích.

Trước hết, nếu có điều gì đó không thực sự đúng và kế hoạch thực hiện trông kỳ lạ, hãy luôn xem xét số liệu thống kê và xây dựng lại chỉ mục.

Việc tạo chỉ mục không phân cụm cho chỉ mục được phân cụm thường không mang lại bất kỳ lợi ích nào nhưng khi bảng có nhiều bản ghi và bản ghi gần với giới hạn 8K của nó, điều đó rất hữu ích. Như bạn đã biết, SQL khi nó chuyển đến đĩa để tải một bản ghi, nó sẽ tải một trang 8K. Theo cách tương tự, khi lập chỉ mục, nó sẽ tải một trang 8K. Bây giờ với chỉ mục là một số nguyên 4 byte, điều này có nghĩa là tải ID cho 2000 bản ghi trong khi nó sẽ tải một số bản ghi nếu nó sử dụng chỉ mục được phân cụm (hãy nhớ tất cả những gì chúng ta cần là ID cho bit JOIN). Bây giờ với việc đây là một tìm kiếm nhị phân, tôi không mong đợi nó chỉ giúp được một chút nào. Vì vậy, có lẽ điều gì đó khác không hoàn toàn đúng, nhưng khó đoán khi chưa nhìn thấy hệ thống.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQL Server - Điều gì xảy ra khi một hàng trong bảng được cập nhật?

  2. Mệnh đề WHERE để tìm tất cả các bản ghi trong một tháng cụ thể

  3. Cách chọn ngày không có thời gian trong SQL

  4. Bản đồ lại nguồn dữ liệu Crystal Report

  5. Ghi tệp csv vào cơ sở dữ liệu SQL Server bằng python