2010-11-11 32 views
10

MIN/MAX vs ORDER BY and LIMITChọn MAX hoặc Sắp xếp theo Giới hạn 1

Để theo dõi câu hỏi này: Tôi tìm thấy một số kết quả rất khác so với những gì Sean McSomething mô tả:

Tôi có một bảng với khoảng 300M hàng.

Select max(foo) from bar; mất khoảng 15 giây. để chạy

Select foo from bar order by foo desc limit 1; mất 3 giây. để chạy các câu hỏi của

Sean "Có vẻ như MIN() là cách để đi - nhanh hơn trong trường hợp xấu nhất, không thể phân biệt được trong trường hợp tốt nhất" không giữ trường hợp này ... nhưng tôi không có ý tưởng tại sao. Bất cứ ai có thể cung cấp một lời giải thích?

Chỉnh sửa: Vì tôi không thể hiển thị cấu trúc của bảng tại đây: giả sử thanh đó là bảng trong một ndb_cluster không có quan hệ, foo là điểm dữ liệu tùy ý không có chỉ mục.

+0

Bạn có thể cung cấp 'TẠO TẠO TẠO TABLE bar' - lập chỉ mục hoặc khóa ngoài có thể ảnh hưởng đến nó – Mikhail

+5

Hai câu lệnh SQL bạn không làm điều tương tự, bạn có chắc là bạn đang kiểm tra chính xác không ? Câu lệnh cuối cùng của bạn sẽ phải 'order by foo', không phải' order by bar' cho chúng là cùng loại – nos

+0

Loại động cơ cũng có thể đóng một phần trong hiệu suất truy vấn. –

Trả lời

5

Để tránh toàn bộ đường chuyền, hãy thêm INDEX vào cột foo.

+1

Việc thiếu chỉ mục trên foo có phải là lý do MAX chạy chậm không? Tại sao? –

+3

Bởi vì việc thiếu chỉ mục có nghĩa là cần phải thực hiện đầy đủ thông tin trên bảng. – Vic

+1

Giả sử có một chỉ số trên foo, liệu 'MAX (foo)' hoặc 'order bởi foo DESC limit 1' có nhanh hơn không? – Programster

0

Tôi có tình huống tương tự, chỉ mục trên cột được đề cập, nhưng đơn đặt hàng bằng giải pháp giới hạn & có vẻ nhanh hơn. Làm thế nào tốt là :)

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