Có điểm nào khi sử dụng MySQL “LIMIT 1” khi truy vấn trên trường khóa chính / duy nhất không?
Việc sử dụng LIMIT 1
không phải là phương pháp hay khi truy vấn với tiêu chí bộ lọc chống lại khóa chính hoặc ràng buộc duy nhất. Khóa chính, hoặc ràng buộc duy nhất, có nghĩa là chỉ có một hàng / bản ghi trong bảng với giá trị đó, chỉ một hàng / bản ghi sẽ được trả về. Thật mâu thuẫn khi có LIMIT 1
trên khóa chính / trường duy nhất - người nào đó duy trì mã sau đó có thể nhầm lẫn tầm quan trọng và lần thứ hai đoán mã của bạn.
Nhưng chỉ số cuối cùng là kế hoạch giải thích:
explain SELECT t.name FROM USERS t WHERE t.userid = 4
... trả về:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
... và:
explain SELECT t.name FROM USERS t WHERE t.userid = 4 LIMIT 1
... trả về:
id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra
-----------------------------------------------------------------------------------------------------
1 | SIMPLE | users | const | PRIMARY | PRIMARY | 4 | const | 1 |
Kết luận
Không khác biệt, không cần. Nó dường như được tối ưu hóa trong trường hợp này (chỉ tìm kiếm dựa trên khóa chính).
Còn trường được lập chỉ mục thì sao?
Trường được lập chỉ mục không đảm bảo tính duy nhất của giá trị đang được lọc, có thể có nhiều hơn một lần xuất hiện. Vì vậy, LIMIT 1
sẽ có lý, giả sử bạn muốn trả về một hàng.