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

Tính toán SQL Server ROW_NUMBER () OVER () cho một bảng dẫn xuất

Row_Number() OVER (ORDER BY (SELECT 1)) mẹo không nên KHÔNG được coi là một cách để tránh thay đổi thứ tự của dữ liệu cơ bản. Nó chỉ là một phương tiện để tránh khiến máy chủ thực hiện sắp xếp bổ sung và không cần thiết (nó có thể vẫn thực hiện sắp xếp nhưng sẽ tốn số tiền tối thiểu có thể so với sắp xếp theo cột).

Tất cả các truy vấn trong máy chủ SQL TUYỆT ĐỐI PHẢI ORDER BY mệnh đề trong truy vấn ngoài cùng để các kết quả được sắp xếp một cách đáng tin cậy theo cách đảm bảo.

Khái niệm "giữ lại thứ tự ban đầu" không tồn tại trong cơ sở dữ liệu quan hệ. Các bảng và truy vấn phải luôn được coi là không có thứ tự cho đến khi và trừ khi có ORDER BY mệnh đề được chỉ định trong truy vấn ngoài cùng.

Bạn có thể thử cùng một truy vấn không có thứ tự 100.000 lần và luôn nhận được nó với cùng một thứ tự, và do đó bạn tin rằng bạn có thể dựa vào thứ tự đã nói. Nhưng đó sẽ là một sai lầm, bởi vì một ngày nào đó, một cái gì đó sẽ thay đổi và nó sẽ không có thứ tự như bạn mong đợi. Một ví dụ là khi cơ sở dữ liệu được nâng cấp lên phiên bản SQL Server mới - điều này đã khiến nhiều truy vấn thay đổi thứ tự của nó. Nhưng nó không phải là một sự thay đổi lớn. Một cái gì đó nhỏ như thêm hoặc xóa một chỉ mục có thể gây ra sự khác biệt. Và hơn thế nữa:Cài đặt gói dịch vụ. Phân vùng bảng. Tạo một dạng xem được lập chỉ mục bao gồm bảng được đề cập. Đạt đến một số điểm giới hạn nơi quét được chọn thay vì tìm kiếm. Và như vậy.

Không dựa vào kết quả để được sắp xếp trừ khi bạn đã nói "Máy chủ, ORDER BY ".




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Bạn có đang đo hiệu suất máy chủ SQL bằng các số liệu này không?

  2. Loại bỏ các dấu cách theo dõi và cập nhật trong các cột trong SQL Server

  3. Khi lưu trữ datetime trong máy chủ sql (kiểu datetime), nó sẽ lưu nó ở định dạng nào?

  4. Cách tìm tên của một ràng buộc trong SQL Server

  5. Tách các giá trị được phân tách bằng dấu phẩy trong các cột thành nhiều hàng trong Sql Server