以犧牲空間來換取時間的 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...