正如標題所述,什麼是全文索引,何時應該使用它?什麼是全文索引,何時應該使用它?
回答
在數據庫中索引通常用於在查找where子句中定義的某些內容時提高性能。但是,當涉及過濾一些文本時,例如使用類似WHERE TextColumn LIKE '%searchstring%'
的東西,那麼搜索速度會很慢,因爲常規數據庫索引的工作方式經過優化,可與列的「整個內容」匹配,而不僅僅是匹配其中的一部分。具體來說,包含通配符的LIKE搜索不能使用任何種類的索引。
正如在下面的評論中提到的,MySQL需要使用MATCH() ... AGAINST
語法在全文索引內進行搜索;順便說一句,這取決於數據庫供應商。在MS SQL中,您可以使用CONTAINS
,因此當您計劃支持其他數據庫時,請記住這一點。
全文索引對常規文本更好,因爲它們針對這些類型的列進行了優化。非常簡化:他們將文本分成單詞,並對單詞進行索引,而不是整個文本。在查找特定單詞時,這對於文本搜索的工作速度要快很多。
FULLTEXT索引不會對LIKE子句做任何事情 - 它們只會用於「MATCH()... AGAINST」子句。以'%'通配符開頭的LIKE子句不能被任何*類型的索引有效加速,並且總是很慢。出於這個原因,應該避免這種類型的LIKE子句,除非過濾已經很少數量的記錄。 – thomasrutter 2014-05-01 06:53:36
換句話說,如果您正在尋找與整個字符串完全匹配的內容,那麼FULLTEXT索引是否是錯誤的使用方法? – aroth 2015-12-01 00:34:52
@aroth當搜索整個列內容時,全文索引根本沒有好處,是的。 – Alex 2016-01-12 15:28:46
全文索引是您在MySQL數據庫中應用於計劃運行全文搜索的文本字段的索引。全文搜索使用match(field) against('text')
語法。如果要運行全文搜索,則必須在要運行的列上有全文索引。
有三種類型的全文搜索。我還要舉手動,因爲我覺得它最好說它:
布爾檢索解釋使用 特殊的查詢語言規則的搜索字符串。字符串 包含要搜索的詞。其 也可以包含運營商 指定的要求,使得 單詞 必須存在或不存在匹配 行,或者它應該被加權 比平常更高或更低。常見的 單詞如「some」或「then」是 停用詞,如果在搜索字符串中存在 則不匹配。 IN BOOLEAN MODE修飾符指定布爾型 搜索。有關詳細信息,請參閱 第11.9.2節「布爾全文 搜索」。
自然語言檢索將檢索字符串解釋爲自然人類語言中的短語 (自由文本中的短語 )。沒有 特殊運營商。停用字列表 適用。另外,存在於50%或更多行中的 的文字是 ,這些文字被認爲是通用的並且不匹配。 如果沒有修飾符爲 ,則全文搜索是自然的 語言搜索。
查詢擴展搜索是對自然語言 進行搜索的修改。搜索字符串用於 執行自然語言搜索。 然後,搜索返回的來自最相關行 的單詞被添加到搜索字符串 ,並且搜索 再次完成。查詢從第二個搜索返回行 。 WITH QUERY EXPANSION修飾符指定查詢 擴展搜索。有關更多 的信息,請參見第11.9.3節,「 」使用查詢 擴展的全文搜索。
有關詳細信息採取甘德在Full Text Search Reference Page。
- 1. 什麼時候應該使用全文索引?
- 2. EGL_KHR_IMAGE < - 它是什麼,什麼時候應該使用它
- 3. 什麼是HTML BB按鈕?什麼時候應該使用它?
- 4. 什麼是模擬,什麼時候應該使用它?
- 5. 什麼是MvcHtmlString,我應該什麼時候使用它?
- 6. 什麼是QVariant,何時應該使用?
- 7. Android什麼是setLevel()以及何時應該使用它?
- 8. SQL:什麼是聚簇索引掃描,爲什麼/何時使用它?
- 9. 什麼是單身模式?爲什麼和什麼時候應該使用它?
- 10. Rails ActiveRecord表索引 - 何時應該使用它們?
- 11. 什麼時候應該使用datagrid,何時應該使用datagridview?
- 12. 什麼時候應該使用$(object),何時應該使用$ object?
- 13. 什麼時候應該將索引應用於數據庫?
- 14. 開發OSX應用程序時全文索引的好選擇是什麼?
- 15. 什麼是Autoconf?爲什麼人們使用它?我應該使用它嗎?
- 16. 什麼是Template.myTemplate.helpers(幫助器),爲什麼我應該使用它?
- 17. 什麼是NHibernate,爲什麼我應該使用它?
- 18. python sys.intern做什麼,它應該在什麼時候使用?
- 19. SqlCommand.Prepare()做什麼以及它應該在什麼時候使用?
- 20. 使用Lucene.Net,我應該在這裏使用什麼索引stategy?
- 21. 有時mysql全文搜索不會返回任何結果,當它應該是
- 22. 應該創建什麼索引?
- 23. Robotium中@Smoke的意義是什麼?什麼時候應該使用它?
- 24. 何時和爲什麼應該使用類和全局變量?
- 25. 什麼時候應該使用一個引用,什麼時候應該使用一個ProjectReference
- 26. 什麼時候應該使用sed,什麼時候應該使用awk
- 27. 什麼時候應該使用memcpy,什麼時候應該使用memmove?
- 28. 什麼時候應該使用Import-Package,什麼時候應該使用Require-Bundle?
- 29. 什麼樣的搜索應該使用
- 30. 什麼是ASN文件,我該如何使用它?
請更改您的問題。你想知道什麼? 「什麼時候使用全文索引」意味着什麼 - 除了「當你打算進行全文檢索時」這個明顯的答案之外呢? – 2010-09-05 10:32:50