sql server 全文索引

2021-09-07 21:35:03 字數 2739 閱讀 2344

以犧牲空間來換取時間的 sql full-text 具體的實現方案如下所示:

1:在sql指令碼中完成full-text的建立【假設我將users表中的loginname欄位(nvarchar)與displayname欄位(nvarchar),sites表中的properties欄位(xml)加入到full-text檔案中】

--檢查資料庫mydb是否支援全文索引,如果不支援

--則使用sp_fulltext_database 開啟該功能

if(select databaseproperty('

mydb

','isfulltextenabled

'))=0

execute sp_fulltext_database

'enable'

--建立全文目錄ft_mydb(最後的引數e:/fulltext是自定義的儲存目錄,要是去掉將會在系統預設的地方建立相應的儲存檔案)

execute sp_fulltext_catalog

'ft_mydb

','create

','e:/fulltext

'--建立唯一索引(這裡一定要先將系統預設為主鍵建立的聚簇索引刪除掉,因為乙個表中只能有乙個聚簇索引)

create unique clustered index usersid on dbo.users(id)

create unique clustered index sitesid on dbo.sites(id)

--為users表和sites表建立全文索引資料元

execute sp_fulltext_table

'users

','create

','ft_mydb

','usersid

'execute sp_fulltext_table

'sites

','create

','ft_mydb

','sitesid

'--設定全文索引列名,(users表的loginname和displayname,sites表的properties)

execute sp_fulltext_column

'users

','loginname

','add

'execute sp_fulltext_column

'users

','displayname

','add

'execute sp_fulltext_column

'sites

','properties

','add'

--建立全文索引

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

execute sp_fulltext_table

'users

','activate

'execute sp_fulltext_table

'sites

','activate'

--填充全文索引目錄

execute sp_fulltext_catalog

'ft_mydb

','start_full'go

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

while fulltextcatalogproperty(

'ft_mydb

','populatestatus

')<>0

begin

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

waitfor delay

'0:0:30

'end

2:用相應的語句就可以對設定了全文索引的列進行filter,具體語句如下所示:

select * from [mydb].[dbo].[users] where contains(loginname,'

"ad*"

') -–獲取nvarchar欄位loginname中包含ad的記錄

select * from [mydb].[dbo].[sites] where contains(properties,'

"haha"

') –獲取xml欄位properties中包含haha的記錄

3:由於sql full-text不能實時與資料庫的資料保持一致,因此要為資料表中的full-text index執行相應的incremental population 或者 full population,這裡我們可以通過手動建立乙個schedule機制對其定期執行,使full-text中的資料與資料庫中的資料保持一致。

不過這裡也可以當我們去查詢資料的時候,可執行一下sql 語句來完成incremental population的執行,來確保每次搜素出來的資料都是最新的,sql語句如下所示:

execute sp_fulltext_catalog '

ft_my_db

','start_incremental

'

但是上面的兩種方式都是我們自己去實現資料的同步,會損失一定的效率,我們可以用更好的一種方式:讓sql server自己去做資料的同步,sql指令碼如下所示:

use dga_db;

goalter fulltext index on [my_db].[dbo].[users] set change_tracking auto;

go

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...