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

Tại sao SQL Server 2008 có thứ tự khi sử dụng GROUP BY và không có thứ tự nào được chỉ định?

Để trả lời câu hỏi này, hãy xem các kế hoạch truy vấn được tạo ra bởi cả hai.

SELECT đầu tiên là một lần quét bảng đơn giản, có nghĩa là nó tạo ra các hàng theo thứ tự phân bổ. Vì đây là một bảng mới nên nó khớp với thứ tự bạn đã chèn các bản ghi.

SELECT thứ hai thêm một GROUP BY, SQL Server thực hiện thông qua một sắp xếp riêng biệt vì số lượng hàng ước tính quá thấp. Nếu bạn có nhiều hàng hơn hoặc thêm tổng hợp vào CHỌN của mình, toán tử này có thể thay đổi.

Ví dụ:hãy thử:

CREATE TABLE #Values ( FieldValue varchar(50) )

;WITH FieldValues AS
(
    SELECT '4' FieldValue UNION ALL
    SELECT '3' FieldValue UNION ALL
    SELECT '2' FieldValue UNION ALL
    SELECT '1' FieldValue
)
INSERT INTO #Values ( FieldValue )
SELECT
    A.FieldValue
FROM FieldValues A
CROSS JOIN FieldValues B
CROSS JOIN FieldValues C
CROSS JOIN FieldValues D
CROSS JOIN FieldValues E
CROSS JOIN FieldValues F

SELECT
    FieldValue
FROM #Values
GROUP BY
    FieldValue

DROP TABLE #Values

Do số lượng hàng, điều này thay đổi thành tổng hợp băm và bây giờ không có sắp xếp trong kế hoạch truy vấn.

Không có ORDER BY, SQL Server có thể trả về kết quả theo bất kỳ thứ tự nào và thứ tự nó quay lại là một tác dụng phụ của cách nó cho rằng nó có thể trả lại dữ liệu nhanh nhấ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. Ví dụ về SIGN () trong SQL Server

  2. Định dạng tiền tệ SQL Server 2005 với dấu phẩy và dấu chấm

  3. Làm cách nào để sắp xếp chuỗi theo thứ tự bảng chữ cái

  4. Chọn một công cụ giám sát máy chủ SQL để phù hợp với nhu cầu của bạn

  5. Không thể mở cơ sở dữ liệu vì nó là phiên bản 851. Máy chủ này hỗ trợ phiên bản 782 trở về trước. Đường dẫn hạ cấp không được hỗ trợ