2010-09-05 26 views
19

正如標題所述,什麼是全文索引,何時應該使用它?什麼是全文索引,何時應該使用它?

+1

請更改您的問題。你想知道什麼? 「什麼時候使用全文索引」意味着什麼 - 除了「當你打算進行全文檢索時」這個明顯的答案之外呢? – 2010-09-05 10:32:50

回答

13

在數據庫中索引通常用於在查找where子句中定義的某些內容時提高性能。但是,當涉及過濾一些文本時,例如使用類似WHERE TextColumn LIKE '%searchstring%'的東西,那麼搜索速度會很慢,因爲常規數據庫索引的工作方式經過優化,可與列的「整個內容」匹配,而不僅僅是匹配其中的一部分。具體來說,包含通配符的LIKE搜索不能使用任何種類的索引。

正如在下面的評論中提到的,MySQL需要使用MATCH() ... AGAINST語法在全文索引內進行搜索;順便說一句,這取決於數據庫供應商。在MS SQL中,您可以使用CONTAINS,因此當您計劃支持其他數據庫時,請記住這一點。

全文索引對常規文本更好,因爲它們針對這些類型的列進行了優化。非常簡化:他們將文本分成單詞,並對單詞進行索引,而不是整個文本。在查找特定單詞時,這對於文本搜索的工作速度要快很多。

+6

FULLTEXT索引不會對LIKE子句做任何事情 - 它們只會用於「MATCH()... AGAINST」子句。以'%'通配符開頭的LIKE子句不能被任何*類型的索引有效加速,並且總是很慢。出於這個原因,應該避免這種類型的LIKE子句,除非過濾已經很少數量的記錄。 – thomasrutter 2014-05-01 06:53:36

+2

換句話說,如果您正在尋找與整個字符串完全匹配的內容,那麼FULLTEXT索引是否是錯誤的使用方法? – aroth 2015-12-01 00:34:52

+1

@aroth當搜索整個列內容時,全文索引根本沒有好處,是的。 – Alex 2016-01-12 15:28:46

10

全文索引是您在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

相關問題