2013-03-07 15 views
5

Câu hỏi rất đơn giản. Mà truy vấn sẽ nhanh hơn:Hiệu suất chênh lệch: chọn 1 đơn hàng đầu tiên so với chọn min (val)

SELECT TOP 1 value FROM table ORDER BY value 

hoặc

SELECT TOP 1 MIN(value) FROM table 

Chúng ta có thể giả sử rằng chúng ta có hai trường hợp, Case 1. Không chỉ mục và trường hợp 2. Với chỉ số về giá trị.
Mọi thông tin chi tiết đều được đánh giá cao. Cảm ơn!

+6

bạn không cần phải gọi 'TOP 1' vì 'MIN' đã trả về một giá trị. –

+0

Nếu có bất kỳ sự khác biệt nào, nó sẽ phụ thuộc vào dbms được sử dụng để bạn có thể muốn thêm cái nào bạn đang nhập. –

+1

Hai opeartions không bằng nhau, nếu có ví dụ tồn tại 'NULL' trong cột' TOP 1' + 'order by' sẽ trả về' NULL' và 'MIN' giá trị nhỏ nhất không null. – Magnus

Trả lời

9

Trong trường hợp không có chỉ số tồn tại:

  • MIN (giá trị) nên được thực hiện trong thời gian O (N) thời gian với một lần quét;
  • TOP 1 ... ORDER BY sẽ yêu cầu thời gian O (N Log N) vì loại được chỉ định (trừ khi động cơ DB đủ thông minh để đọc ý định mà tôi ghét phải dựa vào mã sản xuất).

Khi một chỉ số không tồn tại:

  • Cả hai nên chỉ cần O (1) thời gian, bằng cách sử dụng chỉ mục.
+0

Cảm ơn. Câu trả lời như tôi đang tìm kiếm! – www

+0

Tôi thấy "Được chấp thuận" đến - đó luôn là lời cảm ơn đầy đủ. –