SQL2000 全文索引完全圖解
全文檢索可以對varchar,text,image型字段進行檢索,但一個表最多只能建一個全文索引
SQL Server 2000 引入了對存儲在 image 列中的這些類型的數(shù)據(jù)執(zhí)行全文檢索的能力。
如果沒有全文索引,對字符的模糊查詢只能對基表進行全表掃描(或索引掃描),
執(zhí)行模糊查詢都需要對全表掃描或索引掃描意味著消耗大量IO。
如果模糊查詢經(jīng)常發(fā)生,會造成數(shù)據(jù)庫性能惡化。
本篇為簡單起見,僅在varchar型字段上圖文演示非常完整的而且是高效可行的全文索引
創(chuàng)建及維護過程.
1:
在企業(yè)管理器中展開要建立全文索引的數(shù)據(jù)庫,右擊“全文目錄”,選擇“新建全文目錄”
如 圖1 所示。
可以修改全文目錄的路徑,通過將全文目錄放在單獨的磁盤或磁盤陣列可以提高效率。
建議不要對整個全文目錄進行任何形式的填充調(diào)度。
=================== 圖1 ===================
2:
接下來對具體的表添加全文索引。
全文索引不能建立在視圖上,只能建立在有唯一索引(主鍵也是唯一索引)的基礎表上。
下圖2 演示如何對表建立全文索引。
演示中的 t_fulltext 表的建表及初始化數(shù)據(jù)的腳本如下:
create table t_fulltext
(
rid int identity(1,1),
title varchar(256) not null,
writetime datetime default(getdate())
)
go
alter table t_fulltext add constraint pk_fulltext primary key ( rid )
go
--初始化數(shù)據(jù)
insert into t_fulltext(title) values('山東蓬萊河西金礦透水事故2人死亡3人失蹤(21:29)')
insert into t_fulltext(title) values('泰國將在廣西南寧設立總領事館(21:10)')
insert into t_fulltext(title) values('河北安徽等12省減免農(nóng)業(yè)稅等政策落實到位(20:43)')
insert into t_fulltext(title) values('臺灣學者托夢預測陳水扁元旦講話(20:04)')
insert into t_fulltext(title) values('澳門特首何厚鏵發(fā)表元旦獻辭向市民問候新年(20:02)')
insert into t_fulltext(title) values('南水北調(diào)首個建成項目山東段濟平干渠通水成功(19:48)')
insert into t_fulltext(title) values('組圖:北京110摩托車巡警亮相(18:07)')
insert into t_fulltext(title) values('福建廣西發(fā)生患者死亡事件 醫(yī)院責任人被處理(17:33)')
insert into t_fulltext(title) values('北京大容量公交車運營首日遭遇乘客爆滿(17:30)')
insert into t_fulltext(title) values('北京公安系統(tǒng)今天全部停休嚴查五環(huán)內(nèi)放炮(17:30)')
insert into t_fulltext(title) values('研究發(fā)現(xiàn)海龍基因酶對禽流感病毒有殺傷作用(17:27)')
insert into t_fulltext(title) values('上海世博會籌辦進入實質(zhì)性操作面臨五大挑戰(zhàn)(17:03)')
insert into t_fulltext(title) values('臺媒體稱陳水扁元旦祝詞必將老調(diào)重彈(15:30)')
insert into t_fulltext(title) values('珠三角咸潮影響范圍小于去年(15:12)')
insert into t_fulltext(title) values('上海市民體驗軌道交通4號線列車(組圖)(14:53)')
insert into t_fulltext(title) values('廣州億元集資詐騙案主犯王日升被判死緩(圖)(14:44)')
insert into t_fulltext(title) values(' 評論:取消農(nóng)業(yè)稅讓民眾共享經(jīng)濟增長成果(17:30)')
insert into t_fulltext(title) values('香港媒體談美國應對中國新策略:合作與防范(15:57)')
insert into t_fulltext(title) values('專訪中國地震局局長陳建民:地震是能夠預測的(15:56)')
insert into t_fulltext(title) values('評論:野蠻公交莫成城市丑陋形象代言人(13:27)')
insert into t_fulltext(title) values('臺媒體稱當局與民間企業(yè)對立非民眾之福(12:50)')
=================== 圖2 ===================
3:出現(xiàn)的歡迎界面如 圖3
=================== 圖3 ===================
4:為全文索引選擇唯一索引,如 圖4
=================== 圖4 ===================
5:選擇全文索引的列,注意一張表只能建一個全文索引。建
議不要選擇斷詞的語言,這樣實際會使用默認的斷詞語言。如圖5 所示。
通過運行
sp_configure 'default full-text language'
可以查看默認的斷詞語言,如我的機器上運行上條語句,config_value 值是 2052
它表示簡體中文。
其它代碼所表示的語言可以查閱Book Online的“default full-text language”關鍵詞。
由于SQL Server對中文斷詞并不是很高明,因此并不能依靠SQL Server帶給您非常智能的搜索,這意味著您的全文搜索結果,可能有不希望出現(xiàn)的記錄,或您希望出現(xiàn)的記錄沒有出現(xiàn)。
=================== 圖5 ===================
6:將表指派到全文目錄,如 圖6 所示,也可以通過此界面創(chuàng)建新目錄。
=================== 圖6 ===================
7:接下來會提示對表進行填充調(diào)度,為能夠準實時地把基表的全文索引列的修改(增、刪、改)準實時地應用到全文索引,建議使用下面介紹的其它方法進行索引維護。如 圖7 所示,建議不要在這里添加任何調(diào)度,直接點擊“下一步”。
如果數(shù)據(jù)不會再修改,則在一次完全填充以后,不用再增加其它類型的表級填充。
如果實施到本步驟,不再添加任何形式的表調(diào)度,那么基表數(shù)據(jù)的更新,將不能更新到全文索引。
=================== 圖7 ===================
8:如 圖8 所示出現(xiàn)的完成界面提示中點擊“完成 ”,請稍微等待直到出現(xiàn)下一界面。
=================== 圖8 ===================
9:在如 圖9 所示的界面中點擊“確定”。
由于尚未在表上添加任何調(diào)度,因此還需要繼續(xù)設置。
=================== 圖9 ===================
10:在企業(yè)管理器中右擊 f_fulltext 表,如 圖10 所示,選中“更改跟蹤”。
選中更改跟蹤后,以后對基表數(shù)據(jù)的修改,才能反映到全文索引中。
特別注意:一旦選中“更改跟蹤”,根據(jù)經(jīng)驗,其實是必須對該表進行完全填充的。
如果是在線使用的全文索引數(shù)據(jù)庫,選中“更改跟蹤”會導致性能迅速下降,導致全文索引
無法使用。
=================== 圖10 ===================
11: 在企業(yè)管理器中右擊 f_fulltext 表,如 圖11 所示,選中“更新后臺中的索引”。
到本步,全文索引就完全完成了。由于我們選中了“更改跟蹤”,此時實際已經(jīng)開始了表的完全填充。
根據(jù)經(jīng)驗,300萬條全文索引字段長為 50 的表,需要8到10小時才能完成完全填充。
=================== 圖11 ===================
12:可以通過雙擊全文目錄下的全文索引,查看該全文目錄的屬性,如 圖12 所示,狀態(tài)為“空閑”,而項目計數(shù)大于0,則表示完全填充已經(jīng)完成了。
=================== 圖12 ===================
13:如何進行全文索引查詢(僅簡單介紹)
全文索引查詢建議使用 CONTAINS 及 FREETEXT 謂詞進行查詢。
如果關鍵詞僅包括干擾詞(有關干擾詞的信息,請參閱Book Online的“干擾詞”關鍵字)
select * from t_fulltext where contains(title,'3')
則會報如下錯誤
服務器: 消息 7619,級別 16,狀態(tài) 1,行 1
全文操作運行失敗。查詢子句只包含被忽略的詞。
使用下面的語法,能避免出現(xiàn)錯誤,且能夠確實查詢出正確的記錄。
select * from t_fulltext where contains(title,'"*3*"')
13 臺媒體稱陳水扁元旦祝詞必將老調(diào)重彈(15:30) 2005-12-31 23:17:17.670
10 北京公安系統(tǒng)今天全部停休嚴查五環(huán)內(nèi)放炮(17:30) 2005-12-31 23:17:17.653
17 評論:取消農(nóng)業(yè)稅讓民眾共享經(jīng)濟增長成果(17:30) 2005-12-31 23:17:17.670
9 北京大容量公交車運營首日遭遇乘客爆滿(17:30) 2005-12-31 23:17:17.653
8 福建廣西發(fā)生患者死亡事件 醫(yī)院責任人被處理(17:33) 2005-12-31 23:17:17.653
(所影響的行數(shù)為 5 行)
全文索引的簡單介紹就到這里了,希望能起個拋磚引玉的作用。
相關文章
SQL Server誤區(qū)30日談 第22天 資源調(diào)控器可以調(diào)控IO
資源調(diào)控器無法調(diào)控IO,希望下一個版本的SQL Server支持調(diào)控IO,調(diào)控IO對于對于減少對于大表的scan操作帶來的性能影響很有幫助2013-01-01SQL Server高級內(nèi)容之子查詢和表鏈接概述及使用
子查詢就是在查詢的where子句中的判斷依據(jù)是另一個查詢的結果,表鏈接就是將多個表合成為一個表,但是不是向union一樣做結果集的合并操作,但是表鏈接可以將不同的表合并,并且共享字段,感興趣的你可以了解下本文2013-03-03SQL Server誤區(qū)30日談 第14天 清除日志后會將相關的LSN填零初始化
當日志文件在手動增長,自動增長和創(chuàng)建時都會進行填零初始化操作。但是請不要把這個過程和定期清除日志的過程搞混2013-01-01使用NotePad++錄制宏功能如何快速將sql搜索條件加上前后單引號
這篇文章給大家介紹使用NotePad++錄制宏功能如何快速將sql搜索條件加上前后單引號,對notepad 引號問題感興趣的朋友可以參考下本篇文章2015-10-10詳解SQL Server如何修改數(shù)據(jù)庫物理文件的存在位置
這篇文章主要給大家介紹了關于SQL Server如何修改數(shù)據(jù)庫物理文件存在位置的相關資料,文中介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來看看吧。2017-06-06完美解決SQL server2005中插入漢字變成問號的問題
以下是對在SQL server2005中插入漢字變成問號的解決辦法進行了分析介紹。需要的朋友可以過來參考下2013-08-08sqlserver實現(xiàn)樹形結構遞歸查詢(無限極分類)的方法
下面小編就為大家?guī)硪黄猻qlserver實現(xiàn)樹形結構遞歸查詢(無限極分類)的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-07-07