Câu trả lời:
Trong trường hợp xấu nhất, khi bạn đang xem một trường không được lập chỉ mục, việc sử dụng MIN()
yêu cầu một lần chuyển đầy đủ của bảng. Sử dụng SORT
và LIMIT
yêu cầu một tập tin. Nếu chạy với một bàn lớn, có thể sẽ có sự khác biệt đáng kể về hiệu suất đạt được. Là một điểm dữ liệu vô nghĩa, MIN()
mất 0,36 giây SORT
vàLIMIT
mất 0,84 giây so với bảng 106.000 hàng trên máy chủ nhà phát triển của tôi.
Tuy nhiên, nếu bạn đang xem một cột được lập chỉ mục, thì sự khác biệt sẽ khó nhận thấy hơn (điểm dữ liệu vô nghĩa là 0,00 giây trong cả hai trường hợp). Tuy nhiên, nhìn vào đầu ra của giải thích, có vẻ như MIN()
có thể chỉ cần lấy giá trị nhỏ nhất từ chỉ mục (các hàng 'Chọn bảng được tối ưu hóa' và 'NULL') trong khi SORT
và LIMIT
vẫn cần thực hiện duyệt chỉ mục có thứ tự (106.000 hàng). Tác động hiệu suất thực tế có lẽ là không đáng kể.
Có vẻ như đây MIN()
là cách để đi - nó nhanh hơn trong trường hợp xấu nhất, không thể phân biệt trong trường hợp tốt nhất, là SQL chuẩn và thể hiện rõ ràng nhất giá trị bạn đang cố gắng đạt được. Như mson đã đề cập, trường hợp duy nhất mà có vẻ như việc sử dụng SORT
và LIMIT
mong muốn sẽ là, như mson đã đề cập, khi bạn đang viết một phép toán chung tìm giá trị N trên cùng hoặc dưới cùng từ các cột tùy ý và không đáng để viết ra phép toán trường hợp đặc biệt.
SELECT MIN(`field`)
FROM `tbl`;
Đơn giản vì nó tương thích ANSI. Giới hạn 1 dành riêng cho MySql vì TOP là SQL Server.
Như mson và Sean McSomething có ra nhọn, MIN là một lợi thế.
Một lý do khác mà ORDER BY + LIMIT hữu ích là nếu bạn muốn nhận giá trị của một cột khác với cột MIN.
Thí dụ:
SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1
Tôi nghĩ câu trả lời phụ thuộc vào những gì bạn đang làm.
Nếu bạn có một truy vấn tắt và mục đích đơn giản như bạn đã chỉ định, chọn min (trường) là phù hợp hơn.
Tuy nhiên, thông thường các loại yêu cầu này thay đổi thành - lấy kết quả thứ n hàng đầu, lấy kết quả thứ n - thứ, v.v.
Tôi không nghĩ rằng đó là một ý tưởng quá khủng khiếp khi cam kết với cơ sở dữ liệu bạn đã chọn. Thay đổi dbs không nên được thực hiện nhẹ nhàng và phải sửa đổi là cái giá bạn phải trả khi thực hiện động thái này.
Tại sao lại giới hạn bản thân ngay bây giờ, vì những cơn đau mà bạn có thể cảm thấy hoặc không thể cảm thấy sau này?
Tôi nghĩ rằng thật tốt nếu duy trì ANSI nhiều nhất có thể, nhưng đó chỉ là phương châm ...
Với hiệu suất chấp nhận được, tôi sẽ sử dụng cái đầu tiên vì nó gần với ý định hơn về mặt ngữ nghĩa.
Nếu hiệu suất là một vấn đề, (Hầu hết các trình tối ưu hóa hiện đại sẽ tối ưu hóa theo tỷ lệ cả hai cho cùng một kế hoạch truy vấn, mặc dù bạn phải kiểm tra để xác minh điều đó) thì tất nhiên tôi sẽ sử dụng kế hoạch nhanh hơn.