必須具備全文目錄,而後才能建立全文索引。 目錄是包含一個或多個全文索引的虛擬容器。數據庫
一、鏈接數據庫,選擇數據庫,選擇數據表-》右鍵數據表-》選擇全文索引-》選擇定義全文索引。工具
二、在全文索引向導點擊下一步。性能
三、在全文索引向導彈出框-》選擇一個最小惟一索引-》點擊下一步。spa
四、在全文索引向導彈出框-》選擇全文檢索數據列-》點擊下一步。3d
五、在全文索引向導彈出框-》選擇表或者視圖修改全文索引修改方式-》點擊下一步。代理
六、在全文索引向導彈出框-》能夠選擇已有的全文索引目錄或者自定義全文索引目錄-》點擊下一步。xml
七、在全文索引向導彈出框-》選擇填充計劃,能夠自定義填充計劃-》點擊下一步。blog
八、在全文索引向導彈出框-》點擊完成。索引
語法:ip
--聲明數據庫引用
use 數據庫名;
go
--查看全文索引是否存在,若是存在則刪除
if exists(select * from sys.fulltext_indexes)
drop fulltext index on 表名;
go
create
fulltext --建立全文索引
index
on 表名--包含全文索引中的一列或多列的表或索引視圖的名稱。
(
name1 --全文索引中包含的列的名稱。 只能爲 char、varchar、nchar、nvarchar、text、ntext、image、xml 或 varbinary 類型的列編制索引,以供全文搜索使用。
--[LANGUAGE language_term] --存儲在 column_name 中的數據的語言。
--statistical_semantics, --建立做爲統計語義索引一部分的附加關鍵短語和文檔類似性索引。
name2
--[LANGUAGE language_term]
--statistical_semantics,
......
)
key index 惟一索引名稱--table_name 的惟一鍵索引的名稱。 KEY INDEX 必須是惟一的單鍵列,不可爲 Null。 爲全文惟一鍵選擇最小的惟一鍵索引。 爲得到最佳性能,建議全文鍵使用整數數據類型。
on 全文目錄--用於全文索引的全文目錄。 數據庫中必須已存在該目錄。 此子句爲可選項。 若是未指定,則使用默認目錄。 若是默認目錄不存在, SQL Server 將返回錯誤。
with(
--CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
--指定是否由 SQL Server 將對全文索引所覆蓋的表列所作的更改(更新、刪除或插入)傳播到全文索引。 經過 WRITETEXT 和 UPDATETEXT 所作的數據更改不會反映到全文索引中,也不能使用更改跟蹤方法拾取。
--MANUAL
--指定必須經過調用 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 語句(手動填充)。 您可使用 SQL Server 代理來按期調用此 Transact-SQL 語句。
--AUTO
--指定當基表中的數據修改時,所跟蹤的更改將會自動傳播(自動填充)。 儘管是自動傳播更改,但這些更改可能不會當即反映到全文索引中。 默認值爲 AUTO。
--OFF [ , NO POPULATION]
--指定 SQL Server 不保留對索引數據的更改的列表。 若是未指定 NO POPULATION,則 SQL Server 建立索引後將對其進行徹底填充。
--僅當 CHANGE_TRACKING 爲 OFF 時,才能使用 NO POPULATION 選項。 若是指定了 NO POPULATION,則 SQL Server 在建立索引後不會對其進行填充。 僅當用戶使用 START FULL POPULATION 或 START INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令以後,纔會填充索引。
change_tracking={ MANUAL | AUTO | OFF [ , NO POPULATION ] },
--STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
--將全文非索引字表與索引關聯起來。 不使用屬於指定非索引字表的任何標記填充索引。 若是未指定 STOPLIST,則 SQL Server 會將系統全文非索引字表與索引關聯起來。
--OFF
--指定沒有與全文索引關聯的非索引字表。
--SYSTEM
--指定應對此全文索引使用默認的全文系統 STOPLIST。
--stoplist_name
--指定要與全文索引關聯的非索引字表的名稱。
stoplist= { OFF | SYSTEM | stoplist_name },
--SEARCH PROPERTY LIST [ = ] property_list_name
--適用範圍: SQL Server 2012 (11.x) 到 SQL Server 2017。
--將搜索屬性列表與索引相關聯。
--OFF
--指定不會將任何屬性列表與全文索引相關聯。
--property_list_name
--指定要與全文索引關聯的搜索屬性列表的名稱。
search property list={ off | property_list_name },
)
go
示例:
--聲明數據庫引用
use testss;
go
--查看全文索引是否存在,若是存在則刪除
if exists(select * from sys.fulltext_indexes)
drop fulltext index on test1;
go
create
fulltext --建立全文索引
index
--firstfulltextindex
on test1 --包含全文索引中的一列或多列的表或索引視圖的名稱。
(
name --全文索引中包含的列的名稱。 只能爲 char、varchar、nchar、nvarchar、text、ntext、image、xml 或 varbinary 類型的列編制索引,以供全文搜索使用。
--[LANGUAGE language_term] --存儲在 column_name 中的數據的語言。
--statistical_semantics --建立做爲統計語義索引一部分的附加關鍵短語和文檔類似性索引。
)
key index PK__test1__3213E83F466EE881 --table_name 的惟一鍵索引的名稱。 KEY INDEX 必須是惟一的單鍵列,不可爲 Null。 爲全文惟一鍵選擇最小的惟一鍵索引。 爲得到最佳性能,建議全文鍵使用整數數據類型。
on FirstFullText --用於全文索引的全文目錄。 數據庫中必須已存在該目錄。 此子句爲可選項。 若是未指定,則使用默認目錄。 若是默認目錄不存在, SQL Server 將返回錯誤。
with(
--CHANGE_TRACKING [ = ] { MANUAL | AUTO | OFF [ , NO POPULATION ] }
--指定是否由 SQL Server 將對全文索引所覆蓋的表列所作的更改(更新、刪除或插入)傳播到全文索引。 經過 WRITETEXT 和 UPDATETEXT 所作的數據更改不會反映到全文索引中,也不能使用更改跟蹤方法拾取。
--MANUAL
--指定必須經過調用 ALTER FULLTEXT INDEX … START UPDATE POPULATION Transact-SQL 語句(手動填充)。 您可使用 SQL Server 代理來按期調用此 Transact-SQL 語句。
--AUTO
--指定當基表中的數據修改時,所跟蹤的更改將會自動傳播(自動填充)。 儘管是自動傳播更改,但這些更改可能不會當即反映到全文索引中。 默認值爲 AUTO。
--OFF [ , NO POPULATION]
--指定 SQL Server 不保留對索引數據的更改的列表。 若是未指定 NO POPULATION,則 SQL Server 建立索引後將對其進行徹底填充。
--僅當 CHANGE_TRACKING 爲 OFF 時,才能使用 NO POPULATION 選項。 若是指定了 NO POPULATION,則 SQL Server 在建立索引後不會對其進行填充。 僅當用戶使用 START FULL POPULATION 或 START INCREMENTAL POPULATION 子句執行 ALTER FULLTEXT INDEX 命令以後,纔會填充索引。
change_tracking=auto,
--STOPLIST [ = ] { OFF | SYSTEM | stoplist_name }
--將全文非索引字表與索引關聯起來。 不使用屬於指定非索引字表的任何標記填充索引。 若是未指定 STOPLIST,則 SQL Server 會將系統全文非索引字表與索引關聯起來。
--OFF
--指定沒有與全文索引關聯的非索引字表。
--SYSTEM
--指定應對此全文索引使用默認的全文系統 STOPLIST。
--stoplist_name
--指定要與全文索引關聯的非索引字表的名稱。
stoplist=system,
--SEARCH PROPERTY LIST [ = ] property_list_name
--適用範圍: SQL Server 2012 (11.x) 到 SQL Server 2017。
--將搜索屬性列表與索引相關聯。
--OFF
--指定不會將任何屬性列表與全文索引相關聯。
--property_list_name
--指定要與全文索引關聯的搜索屬性列表的名稱。
search property list=off
)
go
優勢:
一、全文索引可對char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 類型字段進行檢索,是解決海量數據模糊查詢的好辦法。
二、一個表只能創建一個全文索引(但能夠對多個字段)。
三、與全文搜索不一樣,LIKE Transact-SQL 謂詞僅對字符模式( char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 謂詞來查詢格式化的二進制數據。此外,對大量非結構化的文本數據執行 LIKE 查詢要比對相同數據執行一樣的全文查詢慢得多。對數百萬行文本數據進行的 LIKE 查詢可能須要幾分鐘的時間才能返回結果;而對於一樣的數據,全文查詢只須要幾秒甚至更少的時間,具體取決於返回的行數及其大小。另外一個考慮因素是 LIKE 僅對整個表執行簡單模式掃描。相反,全文查詢可識別語言,它在索引和查詢時應用特定的轉換,例如,篩選非索引字並進行同義詞庫和變形擴展。這些轉換可幫助全文查詢改進其撤回以及結果的最終排名
缺點:
一、全文索引致使磁盤資源的大量佔用,全文索引自己就是一個利用磁盤空間換取性能的方法。全文索引大的緣由是,按照某種語言來進行分詞。
二、更新字段值,全文索引的索引不會自動更新,索引按期維護,以及表自己的維護操做使得這個表的管理成本大大的增長。
三、使用全文索引並非對應用透明的。若是要想利用全文索引,必須修改查詢語句。原有的查詢語句是不可能利用全文索引的,須要改爲全文索引規定的語法。全文索引不會影響到其餘的SQL語句。
四、全文索引自身還有些缺陷。