全文索引(目錄)

全文索引(目錄)

概念

數據庫【存儲】|【全文目錄】節點是用於保存和管理【全文索引】的節點。全文目錄通常是由同一數據庫中的零個或多個數據表的全文索引構成的。需要注意的是,只能爲每個數據表創建一個全文索引。因此,一旦在某個數據表上創建了全文索引,那麼該數據表將只能隸屬於一個全文目錄。換言之,一個數據庫可以包含一個或多個全文目錄,一個全文目錄可以包含一個或多個全文索引,但一個數據表只能隸屬於一個數據庫全文目錄和全文索引。

使用全文索引的主要步驟如下

(1)首先需要創建全文目錄。
(2)然後將需要創建全文索引的數據表中的數據填充到全文目錄中。這一過程也被稱爲填充全文索引。
(3)完成上述兩步之後,即可開始使用全文索引功能。

創建全文目錄的方法非常簡單。通過SSMS以及T-SQL都可以實現創建全文目錄的功能。

全文索引的優缺點和注意事項:

(1)全文索引可對char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 類型字段進行檢索,是解決海量數據模糊查詢的好辦法。
(2)一個表只能建立一個全文索引(但可以對多個字段)。
(3)與like的比較 MSDN解釋

Like的區別

與全文搜索不同,LIKE Transact-SQL 謂詞僅對字符模式(char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 謂詞來查詢格式化的二進制數據。此外,對大量非結構化的文本數據執行 LIKE 查詢要比對相同數據執行同樣的全文查詢慢得多。對數百萬行文本數據進行的 LIKE 查詢可能需要幾分鐘的時間才能返回結果;而對於同樣的數據,全文查詢只需要幾秒甚至更少的時間,具體取決於返回的行數及其大小。另一個考慮因素是 LIKE 僅對整個表執行簡單模式掃描。相反,全文查詢可識別語言,它在索引和查詢時應用特定的轉換,例如,篩選非索引字並進行同義詞庫和變形擴展。這些轉換可幫助 全文查詢改進其撤回以及結果的最終排名

全文索引的用法:

全文檢索語句主要有CONTAINSFREETEXT

(1)CONTAINS語句的功能是在表的所有列或指定列中搜索:一個字或短語;一個字或短語的前綴;與一個字相近的另一個字;一個字的派生字;一個重複出現的字。CONTAINS是基於全文索引進行查詢的,查詢結果受系統全文索引分詞的方法影響查詢結果會不全
(2)FREETEXT語句的功能是在一個表的所有列或指定列中搜索一個自由文本格式的字符串,並返回與該字符串匹配的數據行。所以,FREETEXT語句所執行的功能又稱做自由式全文查詢。

T-SQL語句

SELECT *  FROM  dbo.test WHERE CONTAINS(d,'基數行')

 

====================================示例=========================================

--檢查數據庫test是否支持全文索引,如果不支持

--則使用sp_fulltext_database 打開該功能

if(select databaseproperty('test','isfulltextenabled'))=0

  execute sp_fulltext_database 'enable'

go

--建立全文目錄fulltext_News

execute sp_fulltext_catalog 'fulltext_News','create'

go

--News表建立全文索引數據元

execute sp_fulltext_table 'News','create','fulltext_News','PK_News'

go

--設置全文索引列名

execute sp_fulltext_column 'News','Title','add'

execute sp_fulltext_column 'News','ContentIndex','add'

go

--建立全文索引

--activate,是激活表的全文檢索能力,也就是在全文目錄中註冊該表

execute sp_fulltext_table 'News','activate'

go

--填充全文索引目錄

execute sp_fulltext_catalog 'fulltext_News','start_full'

go

--檢查全文目錄填充情況

While fulltextcatalogproperty('fulltext_News','populateStatus')<>0

begin

--如果全文目錄正處於填充狀態,則等待30秒後再檢測一次

waitfor delay '0:0:30'

end

 

dbcc dropcleanbuffers

set statistics time on

select * from News where Title like '%%'--時間:16593,記錄:10207

select * from News where charindex('',Title)>0--時間:17210,記錄:10207

select * from News where CONTAINS(Title,'') and id=588158005105--時間:2313,記錄:774

select * from News where FREETEXT(Title,'')--時間:2295,記錄:774

 

參考文檔:http://www.jb51.net/article/43796.htm


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章