Khi tôi thêm LIMIT 1 vào truy vấn MySQL, nó có dừng tìm kiếm sau khi tìm thấy 1 kết quả (do đó làm cho nó nhanh hơn) hay nó vẫn tìm nạp tất cả các kết quả và cắt bớt ở cuối?
Khi tôi thêm LIMIT 1 vào truy vấn MySQL, nó có dừng tìm kiếm sau khi tìm thấy 1 kết quả (do đó làm cho nó nhanh hơn) hay nó vẫn tìm nạp tất cả các kết quả và cắt bớt ở cuối?
Câu trả lời:
Tùy thuộc vào truy vấn, việc thêm mệnh đề giới hạn có thể có ảnh hưởng rất lớn đến hiệu suất. Nếu bạn chỉ muốn một hàng (hoặc biết thực tế là chỉ một hàng có thể đáp ứng truy vấn) và không chắc chắn về cách trình tối ưu hóa nội bộ sẽ thực thi nó (ví dụ: mệnh đề WHERE không đánh chỉ mục, v.v.), thì bạn chắc chắn nên thêm điều khoản LIMIT.
Đối với các truy vấn được tối ưu hóa (sử dụng chỉ mục trên các bảng nhỏ), nó có thể không quan trọng nhiều về hiệu suất, nhưng một lần nữa - nếu bạn chỉ quan tâm đến một hàng, hãy thêm một mệnh đề LIMIT bất kể.
Giới hạn có thể ảnh hưởng đến hiệu suất của truy vấn (xem nhận xét và liên kết bên dưới) và nó cũng làm giảm tập kết quả được xuất ra bởi MySQL. Đối với một truy vấn mà bạn mong đợi một kết quả duy nhất sẽ có lợi ích.
Hơn nữa, việc giới hạn tập kết quả trên thực tế có thể tăng tốc tổng thời gian truy vấn vì việc chuyển các tập kết quả lớn sử dụng bộ nhớ và có khả năng tạo các bảng tạm thời trên đĩa. Tôi đề cập đến vấn đề này vì gần đây tôi đã thấy một ứng dụng không sử dụng giới hạn giết máy chủ do tập hợp kết quả lớn và với giới hạn tại chỗ, việc sử dụng tài nguyên đã giảm xuống rất nhiều.
Kiểm tra trang này để biết thêm chi tiết cụ thể: Tài liệu MySQL: Tối ưu hóa LIMIT
Nếu chỉ có 1 kết quả trả về, thì không, LIMIT sẽ không làm cho kết quả nhanh hơn. Nếu có nhiều kết quả và bạn chỉ cần kết quả đầu tiên và không có NHÓM hoặc LỆNH theo câu lệnh thì LIMIT sẽ làm cho nó nhanh hơn.
Câu trả lời, trong ngắn hạn, là có. Nếu bạn giới hạn kết quả của mình là 1, thì ngay cả khi bạn đang "mong đợi" một kết quả, truy vấn sẽ nhanh hơn vì cơ sở dữ liệu của bạn sẽ không xem qua tất cả các bản ghi của bạn. Nó sẽ chỉ dừng lại khi tìm thấy bản ghi phù hợp với truy vấn của bạn.
UNIQUE
(hoặcPRIMARY KEY
) ràng buộc (hoặc chỉ mục) trên cột bộ lọc. stackoverflow.com/questions/8467092/…