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

? LIKE (cột || '%')

Truy vấn:

SELECT * FROM table WHERE ? LIKE (col || '%');

có thể được viết lại thành (Postgres và MySQL):

SELECT * FROM table WHERE col = left(?, length(col));

Như đã nhận xét, biểu mẫu đầu tiên cũng hoạt động tốt. Tuy nhiên, nó có thể phức tạp vì các ký tự có ý nghĩa đặc biệt cho LIKE (ít nhất _%\ ) trong cột sẽ phải được trốn thoát. Nếu bạn muốn nó hoạt động với cả MySQL và Postgres, bạn sẽ phải quan sát các ký tự đặc biệt trong cả hai cách triển khai. Vì vậy, dạng thứ 2 ít bị lỗi hơn nhiều về tiền gốc.

Hiệu suất

Cả hai truy vấn này đều không thể sử dụng chỉ mục trên col , cả hai đều không sargable . Có thể đánh giá lại vấn đề khi tìm tất cả các tiền tố có thể có cho mẫu tìm kiếm đã cho ? , có thể được tối ưu hóa theo cách tương tự như trong câu trả lời liên quan này (dành cho Postgres) trên dba.SE:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Sử dụng ActiveRecord để đạt được các quan hệ phức tạp trong Rails

  2. So sánh MySQL với giá trị null

  3. nhóm mysql trong khi một giá trị nằm trong một phạm vi

  4. Làm thế nào để kiểm tra xem cột không tồn tại bằng cách sử dụng PHP, PDO, MySQL?

  5. Sao lưu cơ sở dữ liệu logic bằng MySQL Shell