2011-08-10 24 views
6

Tôi tự hỏi làm thế nào những công việc dưới mui xe, đặc biệt là cho bộ kết quả lớn. Ví dụ, liệu DB có khả năng ghi kết quả thô vào đĩa và sau đó thực hiện sắp xếp bên ngoài?Cơ sở dữ liệu thực hiện SQL ORDER BY x 'như thế nào?

Tôi cũng tự hỏi cách hoạt động với LIMIT ... OFFSET. Nếu DB không thể sử dụng một chỉ mục hiện có, có vẻ như DB sẽ phải sắp xếp toàn bộ thứ và nhổ tập con của tập kết quả thô.

Trả lời

4

Chỉ mục được đặt hàng; nếu có chỉ số phù hợp, sẽ được sử dụng. Nếu không, họ sẽ cần phải sắp xếp, như bạn cho là vậy. Kế hoạch thực hiện cho truy vấn (mà bạn có thể nhận được với ví dụ: EXPLAIN hoặc qua client menus; phương pháp chính xác để nhận được truy vấn khác với DBMS) có thể chứa các gợi ý về cách sắp xếp truy vấn.

Xem:

  1. MySQL: ORDER BY Optimization
  2. PostgreSQL: Indexes and ORDER BY
  3. SQL Server Indexes
  4. Oracle: Understanding Indexes
1

mySQL cho thấy thứ tự của riêng họ bởi tối ưu hóa trên this link

Oracle cho thấy theor thứ tự riêng By thủ tục thuật toán here

Về cơ bản, Nếu bạn có một chỉ số, nó được đặt hàng. Nhưng khi bạn không phân loại xảy ra là O(n log n)

0

Bạn có khá nhiều quyền. Nếu không có gì đã được chuẩn bị hoặc được lên kế hoạch trước (tức là các chỉ mục, hoặc dữ liệu khác được chuẩn bị trước hoặc lưu trữ), thì có, tất cả dữ liệu phải được xem xét để tạo ra thứ tự thích hợp phải được đọc, và nếu số lượng dữ liệu được làm việc trên không thể phù hợp trong bộ nhớ có sẵn/phân bổ, sau đó bộ nhớ đệm đĩa sẽ cần phải được thực hiện.

Đó là một vấn đề hiệu suất không tầm thường, và mọi RDBMS sẽ có những cách thông minh để giải quyết và tối ưu hóa nó, để bạn sử dụng sản phẩm của họ chứ không phải là "X thương hiệu" kém chất lượng.

Các vấn đề liên quan