創建全文索引的必須條件 必須具有全文目錄,然後才能創建全文索引。 目錄是包含一個或多個全文索引的虛擬容器。 使用SSMS資料庫管理工具創建全文索引 1、連接資料庫,選擇資料庫,選擇數據表-》右鍵數據表-》選擇全文索引-》選擇定義全文索引。 2、在全文索引嚮導點擊下一步。 3、在全文索引嚮導彈出框-》 ...
創建全文索引的必須條件
必須具有全文目錄,然後才能創建全文索引。 目錄是包含一個或多個全文索引的虛擬容器。
使用SSMS資料庫管理工具創建全文索引
1、連接資料庫,選擇資料庫,選擇數據表-》右鍵數據表-》選擇全文索引-》選擇定義全文索引。
2、在全文索引嚮導點擊下一步。
3、在全文索引嚮導彈出框-》選擇一個最小唯一索引-》點擊下一步。
4、在全文索引嚮導彈出框-》選擇全文檢索數據列-》點擊下一步。
5、在全文索引嚮導彈出框-》選擇表或者視圖修改全文索引修改方式-》點擊下一步。
6、在全文索引嚮導彈出框-》可以選擇已有的全文索引目錄或者自定義全文索引目錄-》點擊下一步。
7、在全文索引嚮導彈出框-》選擇填充計劃,可以自定義填充計劃-》點擊下一步。
8、在全文索引嚮導彈出框-》點擊完成。
使用T-SQL腳本創建全文索引
語法:
--聲明資料庫引用
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
創建全文索引優缺點
優點:
1、全文索引可對char、varchar、nchar、nvarchar、text、ntext、image、xml、varbinary 或 varbinary(max) 類型欄位進行檢索,是解決海量數據模糊查詢的好辦法。
2、一個表只能建立一個全文索引(但可以對多個欄位)。
3、與全文搜索不同,LIKE Transact-SQL 謂詞僅對字元模式( char、varchar、nchar、nvarchar)有效。另外,不能使用 LIKE 謂詞來查詢格式化的二進位數據。此外,對大量非結構化的文本數據執行 LIKE 查詢要比對相同數據執行同樣的全文查詢慢得多。對數百萬行文本數據進行的 LIKE 查詢可能需要幾分鐘的時間才能返回結果;而對於同樣的數據,全文查詢只需要幾秒甚至更少的時間,具體取決於返回的行數及其大小。另一個考慮因素是 LIKE 僅對整個表執行簡單模式掃描。相反,全文查詢可識別語言,它在索引和查詢時應用特定的轉換,例如,篩選非索引字併進行同義詞庫和變形擴展。這些轉換可幫助全文查詢改進其撤回以及結果的最終排名
缺點:
1、全文索引導致磁碟資源的大量占用,全文索引本身就是一個利用磁碟空間換取性能的方法。全文索引大的原因是,按照某種語言來進行分詞。
2、更新欄位值,全文索引的索引不會自動更新,索引定期維護,以及表本身的維護操作使得這個表的管理成本大大的增加。
3、使用全文索引並不是對應用透明的。如果要想利用全文索引,必須修改查詢語句。原有的查詢語句是不可能利用全文索引的,需要改成全文索引規定的語法。全文索引不會影響到其他的SQL語句。
4、全文索引自身還有些缺陷。