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

Tìm kiếm toàn văn bản có phải là câu trả lời?

Vấn đề với kiểu tìm kiếm '% keyword%' là không có cách nào để tìm kiếm hiệu quả trên nó trong một bảng thông thường, ngay cả khi bạn tạo một chỉ mục trên cột đó. Hãy nghĩ xem bạn sẽ tra chuỗi đó như thế nào trong danh bạ điện thoại. Thực ra không có cách nào để tối ưu hóa nó - bạn phải quét toàn bộ danh bạ điện thoại - và đó là những gì MySQL làm, quét toàn bộ bảng.

Nếu bạn thay đổi tìm kiếm đó thành 'từ khóa%' và sử dụng chỉ mục, bạn có thể nhận được tìm kiếm rất nhanh. Tuy nhiên, có vẻ như đây không phải là điều bạn muốn.

Vì vậy, với suy nghĩ đó, tôi đã sử dụng lập chỉ mục / tìm kiếm toàn văn bản khá nhiều và đây là một vài ưu và nhược điểm:

Ưu điểm

  • Rất nhanh
  • Trả về kết quả được sắp xếp theo mức độ liên quan (theo mặc định, mặc dù bạn có thể sử dụng bất kỳ cách sắp xếp nào)
  • Có thể sử dụng các từ dừng.

Nhược điểm

  • Chỉ hoạt động với bảng MyISAM
  • Các từ quá ngắn sẽ bị bỏ qua (tối thiểu mặc định là 4 chữ cái)
  • Yêu cầu SQL khác trong mệnh đề where, vì vậy bạn sẽ cần sửa đổi các truy vấn hiện có.
  • Không khớp với các chuỗi một phần (ví dụ:"từ" không khớp với "từ khóa", chỉ "từ")

Đây là một số tài liệu tốt về tìm kiếm toàn văn .

Một tùy chọn khác là sử dụng hệ thống tìm kiếm như Sphinx . Nó có thể cực kỳ nhanh chóng và linh hoạt. Nó được tối ưu hóa để tìm kiếm và tích hợp tốt với MySQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để sử dụng cùng (các) kết nối MySQL cho toàn bộ ứng dụng Node.js của tôi?

  2. Chọn một hàng và các hàng xung quanh nó

  3. Làm cách nào để sử dụng nhóm theo ba cột dữ liệu?

  4. MySQL MONTHNAME () từ các số

  5. công việc cron hoặc trình lập lịch PHP