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

Regexp và mysql:có toán tử AND không

Nếu bạn cần các tính năng tìm kiếm phức tạp, hãy sử dụng giải pháp tìm kiếm toàn văn bản.

Trong MySQL, nội trang chỉ mục tìm kiếm toàn văn bản tính năng này chỉ hoạt động trong công cụ lưu trữ MyISAM. Điều này là không may, bởi vì InnoDB là công cụ lưu trữ thích hợp cho tất cả các bảng MySQL. InnoDB trong các phiên bản gần đây của MySQL nhanh hơn MyISAM trong hầu hết các trường hợp và có các tính năng khôi phục sự cố tốt hơn MyISAM.

Đã có những tuyên bố từ nhóm nhà phát triển MySQL rằng họ dự định triển khai chỉ mục văn bản đầy đủ cho InnoDB. Nhưng chúng ta còn nhiều tháng hoặc thậm chí nhiều năm nữa mới có thể sử dụng tính năng này và chắc chắn nó sẽ yêu cầu nâng cấp lên một số phiên bản MySQL mới hơn.

Nếu bạn phải sử dụng chỉ mục toàn văn bản của MyISAM, tôi khuyên bạn nên lưu trữ dữ liệu của mình chủ yếu trong InnoDB, sau đó lưu trữ bản sao của văn bản có thể tìm kiếm trong bảng MyISAM.

Bạn cũng có thể sử dụng một giải pháp bên ngoài như Sphinx Search hoặc Apache Solr để cung cấp khả năng tìm kiếm toàn văn bản bên ngoài cơ sở dữ liệu. Thậm chí có một cách để sử dụng chỉ mục Sphinx Search thông qua giao diện công cụ lưu trữ có thể cắm được MySQL .

Tôi không thích sử dụng LIKE với các ký tự đại diện hoặc REGEXP cho các tìm kiếm toàn văn bản. Các giải pháp này phải quét toàn bộ bảng cho mọi tìm kiếm và tùy thuộc vào khối lượng dữ liệu của bạn, chạy chậm hơn hàng trăm hoặc hàng nghìn lần so với khi bạn có chỉ mục.

Tôi đã viết so sánh các giải pháp tìm kiếm toàn văn bản cho MySQL trong bản trình bày của mình, " Tìm kiếm Toàn văn Thực tế trong MySQL "và cũng nằm trong một chương của cuốn sách của tôi Phản vật chất SQL:Tránh cạm bẫy của lập trình cơ sở dữ liệu .

cập nhật:MySQL 5.6 hiện đang được phát triển (tính đến tháng 2 năm 2012) và triển khai giải pháp chỉ mục toàn văn bản cho InnoDB.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Không có đủ kết nối nhàn rỗi trong Tomcat JDBC pool

  2. Các ràng buộc ON DELETE CASCADE được xử lý theo thứ tự nào?

  3. Các lớp lồng nhau - CustomRowMapper !! Nó không còn là một vấn đề nữa !! - Phần 1

  4. Làm cách nào để thực hiện THAM GIA NGOÀI TRỜI ĐẦY ĐỦ trong MySQL?

  5. PHP:Cập nhật trùng lặp truy vấn MySQL không có lý do