Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Có bất kỳ điểm nào sử dụng MySQL LIMIT 1 khi truy vấn trên trường được lập chỉ mục / duy nhất không?

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.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Câu lệnh chèn MySql vào kiểu dữ liệu nhị phân?

  2. Làm cách nào để tạo bảng mysql với default_date cột thời gian?

  3. Cách di chuyển rồi xóa trường trong MySQL

  4. Trích xuất Ngày / Tháng / Năm từ Dấu thời gian trên MYSQL

  5. Xử lý dữ liệu từ nhiều trường lựa chọn