Khi trạng thái tiêu đề, chỉ mục toàn văn là gì và khi nào tôi nên sử dụng nó?Chỉ mục toàn văn là gì và khi nào tôi nên sử dụng nó?
Trả lời
Trong chỉ mục cơ sở dữ liệu thường được sử dụng để nâng cao hiệu suất khi tìm kiếm điều gì đó được xác định trong mệnh đề where của bạn. Tuy nhiên, khi nói đến lọc một số văn bản, ví dụ: bằng cách sử dụng một cái gì đó như WHERE TextColumn LIKE '%searchstring%'
thì tìm kiếm chậm, bởi vì cách thức các chỉ mục cơ sở dữ liệu thông thường hoạt động được tối ưu hóa cho các kết quả khớp với 'toàn bộ nội dung' của một cột và không chỉ là một phần của nó. Cụ thể, tìm kiếm LIKE bao gồm các ký tự đại diện không thể sử dụng bất kỳ loại chỉ mục nào.
Như đã đề cập trong nhận xét bên dưới, MySQL cần cú pháp MATCH() ... AGAINST
để tìm kiếm trong chỉ mục toàn văn; BTW tùy thuộc vào nhà cung cấp cơ sở dữ liệu. Trong MS SQL, bạn có thể sử dụng CONTAINS
để ghi nhớ điều này khi bạn có kế hoạch hỗ trợ các cơ sở dữ liệu khác.
Chỉ mục toàn văn hoạt động tốt hơn cho văn bản thông thường, vì chúng được tối ưu hóa cho các loại cột này. Rất đơn giản: Họ chia văn bản thành các từ và tạo chỉ mục trên các từ chứ không phải toàn bộ văn bản. Điều này hoạt động nhanh hơn rất nhiều cho tìm kiếm văn bản khi tìm kiếm các từ cụ thể.
Chỉ mục FULLTEXT sẽ không làm gì cho mệnh đề LIKE - chúng sẽ chỉ được sử dụng cho các mệnh đề 'MATCH() ... AGAINST'. Các mệnh đề tương tự bắt đầu bằng ký tự đại diện '%' không thể được tăng tốc hiệu quả bởi bất kỳ loại chỉ mục * nào và sẽ luôn luôn chậm. Vì lý do này loại mệnh đề LIKE nên tránh trừ khi lọc một số lượng nhỏ các bản ghi. – thomasrutter
Vì vậy, nói cách khác, nếu bạn _are_ tìm kiếm một kết hợp chính xác với toàn bộ chuỗi, chỉ mục FULLTEXT là điều sai để sử dụng? – aroth
@aroth khi tìm kiếm trên toàn bộ nội dung của cột, chỉ mục toàn văn sẽ không có lợi chút nào. – Alex
Chỉ mục văn bản đầy đủ là chỉ mục bạn áp dụng trong cơ sở dữ liệu MySQL cho các trường văn bản mà bạn định chạy tìm kiếm toàn văn. Tìm kiếm toàn văn sử dụng cú pháp match(field) against('text')
. Nếu bạn muốn chạy tìm kiếm toàn văn, bạn phải có chỉ mục văn bản đầy đủ trên các cột bạn sẽ chạy nó.
Có ba loại tìm kiếm Toàn văn. Tôi sẽ báo giá hướng dẫn, bởi vì tôi nghĩ rằng nó nói nó tốt nhất:
Một tìm kiếm boolean giải thích chuỗi tìm kiếm bằng cách sử dụng quy tắc của một ngôn ngữ truy vấn đặc biệt . Chuỗi chứa các từ để tìm kiếm. Nó cũng có thể chứa các toán tử chỉ định các yêu cầu sao cho một từ phải có hoặc không có trong kết hợp hàng hoặc phải là trọng số cao hơn hoặc thấp hơn bình thường. Các từ phổ biến chẳng hạn như “một số” hoặc “sau đó” là các từ dừng và không khớp với nhau nếu hiện tại trong chuỗi tìm kiếm. IN BOOLEAN Công cụ sửa đổi MODE chỉ định một tìm kiếm boolean . Để biết thêm thông tin, hãy xem Mục 11.9.2, “Toàn văn Boolean Tìm kiếm”.
Tìm kiếm ngôn ngữ tự nhiên diễn giải chuỗi tìm kiếm dưới dạng một cụm từ tự nhiên của con người ( cụm từ trong văn bản tự do). Không có toán tử đặc biệt nào. Danh sách từ dừng sẽ được áp dụng. Ngoài ra, các từ là có mặt trong 50% hoặc nhiều hơn các hàng là được coi là phổ biến và không khớp. Tìm kiếm toàn văn là tự nhiên tìm kiếm ngôn ngữ nếu không có công cụ sửa đổi nào là được cung cấp.
Tìm kiếm mở rộng truy vấn là sửa đổi ngôn ngữ tự nhiên tìm kiếm. Chuỗi tìm kiếm được sử dụng để thực hiện tìm kiếm ngôn ngữ tự nhiên. Sau đó, các từ từ các hàng có liên quan nhất được trả về bởi tìm kiếm được thêm vào chuỗi tìm kiếm và tìm kiếm được thực hiện lại một lần nữa là . Truy vấn trả về các hàng từ tìm kiếm thứ hai. WITH QUERY Công cụ sửa đổi mở rộng chỉ định truy vấn tìm kiếm mở rộng . Để biết thêm thông tin , xem Phần 11.9.3, “Tìm kiếm toàn văn bản với truy vấn Mở rộng”.
Để biết thêm thông tin tham gia một ngây ngô tại Full Text Search Reference Page.
- 1. Mục đích của ROWLOCK trên Xóa là gì và khi nào tôi nên sử dụng?
- 2. Khi nào tôi nên sử dụng Bảng chỉ mục của Oracle? Hoặc, khi tôi không nên?
- 3. Request.InputStream là gì và khi nào nên sử dụng?
- 4. Khi nào tôi nên chỉ định CurrentCulture hoặc InvariantCulture và khi nào tôi nên để nó không xác định?
- 5. Khi nào tôi nên sử dụng require() và khi nào nên sử dụng define()?
- 6. Phương pháp Javascript CollectGarbage() là gì? Khi nào và tại sao nó nên được sử dụng?
- 7. Pyximport là gì và tôi nên sử dụng nó như thế nào?
- 8. Sự khác biệt giữa JApplet và Applet là gì và tôi nên sử dụng nó?
- 9. INDEX SPATIAL là gì và khi nào tôi nên sử dụng?
- 10. PDO là gì và tại sao tôi nên sử dụng nó?
- 11. MVVM là gì và chúng tôi có nên sử dụng nó không?
- 12. JAXB là gì và tại sao tôi nên sử dụng nó?
- 13. DSL là gì và tôi nên sử dụng nó ở đâu?
- 14. __declspec là gì và khi nào tôi cần sử dụng?
- 15. Giao thức TDS phiên bản 8.0 là gì và tại sao tôi nên sử dụng nó?
- 16. couchdb là gì, tôi nên sử dụng nó như thế nào?
- 17. Khi nào tôi nên sử dụng setUpClass và khi __init__?
- 18. Làm cách nào để biết khi nào nên sử dụng các chỉ mục và loại nào?
- 19. Khi nào tôi nên sử dụng các mảng được lập chỉ mục của các đỉnh OpenGL?
- 20. Khi nào tôi nên sử dụng Gói-Nhập khẩu và khi nào tôi nên sử dụng Yêu cầu-Gói?
- 21. httpmodules httphandlers, sử dụng lý tưởng chúng là gì? khi nào nên sử dụng và khi nào không sử dụng?
- 22. Khi nào và ở đâu tôi nên sử dụng WCF
- 23. Trong Jira Agile khi nào tôi nên sử dụng "Story" và khi nào tôi nên sử dụng "Cải tiến"
- 24. Mô phỏng là gì và khi nào bạn nên sử dụng?
- 25. Sự khác biệt giữa #import và @class là gì và khi nào tôi nên sử dụng cái kia?
- 26. Khi nào tôi nên sử dụng adorners?
- 27. Khi nào tôi nên sử dụng stdClass và khi nào tôi nên sử dụng một mảng trong mã php oo?
- 28. Python sys.intern làm gì và khi nào nó nên được sử dụng?
- 29. Mục đích của FrameLayout là gì và trong trường hợp nào chúng ta nên sử dụng nó?
- 30. Khi nào tôi nên sử dụng dấu và với scanf()
Vui lòng lặp lại câu hỏi của bạn. Bạn muốn biết gì? Bạn có ý gì khi "khi nào sử dụng chỉ mục toàn văn" - ngoài câu trả lời rõ ràng "khi bạn dự định thực hiện tìm kiếm toàn văn"? –