打個比方,你有很多的小抽屜,每個抽屜裡面放一些雜物,假如你要找東西,最原始的方法就是乙個個抽屜翻,這就是沒有索引的情況。
假如聰明一點,給抽屜編號(唯一鍵),把哪個號碼的抽屜有什麼東西記錄在紙上,找東西先看看這張紙,這就是普通索引,假如你要知道哪個抽屜有什麼,你可以在紙上迅速找到抽屜號碼(大家知道這是使用查詢樹),然後得到相關的資訊,這種情況普通索引是很快的;但是要找到乙個特定的東西哪些抽屜有,你就要把整張紙遍歷一次,這就是like查詢,假如你要找哪些抽屜同時有2種甚至更多種物品,like就更加繁瑣了。假如乙個表有上千萬的紀錄,大家可以想象查詢的代價。
可以換乙個思路,另外找張紙,記錄一樣東西存在於哪些抽屜:
夾子:1,3,4,5,6,9,12...
錢幣:2,3,4,7,12...
藥丸:1,3,5,6...
這樣找到某樣東西或者某幾樣東西都很容易。
全文索引和普通的sql索引有很多的區別:
普通 sql 索引
全文索引
儲存時受定義它們所在的資料庫的控制。
儲存在檔案系統中,但通過資料庫管理。
每個表允許有若干個普通索引。
每個表只允許有乙個全文索引。
當對作為其基礎的資料進行插入、更新或刪除時,它們自動更新。
將資料新增到全文索引稱為填充,全文索引可通過排程或特定請求來請求,也可以在新增新資料時自動發生。
不分組。
在同乙個資料庫內分組為乙個或多個全文目錄。
使用 sql server 企業管理器、嚮導或 transact-sql 語句建立和除去。
使用 sql server 企業管理器、嚮導或儲存過程建立、管理和除去。
使用全文索引的話,可以看看下面的帖子(感謝大力和lihonggen0):
???? 如何在sqlserver中建立全文索引:
????
???
???? 如何使用image欄位:
????
發現大家有乙個常問的問題,就是關於以下的資訊的:
查詢子句只包含被忽略的詞
這是因為使用一些很簡單的詞,比如'是',進行查詢的緣故。
提出的解決辦法不外乎是把c:/program files/microsoft sql server/mssql/ftdata/sqlserver/config/noise.chs 清空
這些詞都是頻率很高的詞,而且在查詢中的意義不大,就好像幾乎每個抽屜裡面都有紙屑一樣,為這些詞作索引得不償失,所以全文引擎把這些詞稱為干擾詞不做索引,個人覺得在應用中過濾這些詞然後向使用者提出友好的提示更好,而不是使用清空noise.chs粗暴的對待全文引擎。比方大家可以看看在google中搜尋「的」
另外謝謝ghj,乙個很重要的東西遺漏了,與一般的索引立即更新不同,全文索引一般是定期維護索引的,所以對於頻繁更新的資料不合適,需要做全文索引的物件一般都是**網頁之類,還算適合拉!
個人覺得我的資料庫沒有代表性,所以也不細說:作索引的時候,cpu和記憶體使用都很高,時間也很長(下面我的資料庫是整個晚上),完成以後並不需要使用很多的系統資源,多個全文查詢併發的時候也有不小的cpu消耗,但是比like強。
我的系統上資料庫是123m,太小,使用全文索引沒有感到特別的優勢,但是可以想想對於google那樣的海量資料,使用like是不可想象的:)當然別人也沒有使用關聯式資料庫。
SQL Server 全文索引
一 建立全文索引 1 使用ssms 2 使用t sql create fulltext index on production.productdescription description key index pk productdescription productdescriptionid on...
SQL Server 全文索引
一 建立全文索引 1 使用ssms 2 使用t sql create fulltext index on production.productdescription description key index pk productdescription productdescriptionid on...
SQL Server 全文索引
一 建立全文索引 1 使用ssms 2 使用t sql create fulltext index on production.productdescription description key index pk productdescription productdescriptionid on...