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

Làm thế nào để tìm kiếm các hàng có chứa một chuỗi con?

Chà, bạn luôn có thể thử WHERE textcolumn LIKE "%SUBSTRING%" - nhưng điều này được đảm bảo là khá chậm, vì truy vấn của bạn không thể khớp chỉ mục vì bạn đang tìm kiếm các ký tự ở phía bên trái.

Nó phụ thuộc vào loại trường - một vùng văn bản thường sẽ không được lưu dưới dạng VARCHAR, mà là (một loại) trường TEXT, vì vậy bạn có thể sử dụng CHỐNG LẠI nhà điều hành.

Để lấy các cột không khớp, chỉ cần đặt KHÔNG ở phía trước tương tự:WHERE textcolumn NOT LIKE "%SUBSTRING%" .

Việc tìm kiếm có phân biệt chữ hoa chữ thường hay không phụ thuộc vào cách bạn lưu trữ dữ liệu, đặc biệt là những gì COLLATION bạn sử dụng. Theo mặc định, tìm kiếm sẽ không phân biệt chữ hoa chữ thường.

Cập nhật câu trả lời để phản ánh cập nhật câu hỏi:

Tôi nói rằng thực hiện một trường WHERE field LIKE "%value%" chậm hơn trường WHERE field LIKE "value%" nếu trường cột có chỉ mục, nhưng điều này vẫn nhanh hơn đáng kể so với việc nhận tất cả các giá trị và có bộ lọc ứng dụng của bạn. Cả hai tình huống:

1 / Nếu bạn làm SELECT field FROM table WHERE field LIKE "%value%" , MySQL sẽ quét toàn bộ bảng và chỉ gửi các trường có chứa "giá trị".

2 / Nếu bạn làm SELECT field FROM table và sau đó yêu cầu ứng dụng của bạn (trong trường hợp của bạn là PHP) chỉ lọc các hàng có "giá trị" trong đó, MySQL cũng sẽ quét toàn bộ bảng, nhưng gửi tất cả các trường tới PHP, sau đó phải thực hiện thêm công việc. Điều này chậm hơn nhiều so với trường hợp số 1.

Giải pháp:Vui lòng sử dụng WHERE và sử dụng EXPLAIN để xem hiệu suất.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Chọn tất cả các dự án có thẻ phù hợp

  2. Tôi nên sử dụng ORM nào cho Node.js và MySQL?

  3. CHÈN và CẬP NHẬT trong một truy vấn MYSQL

  4. Cách chọn tên cột có khoảng trắng trong MySQL

  5. Python mySQL - thoát dấu ngoặc kép