sql server 全文索引

以牺牲空间来换取时间的 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;

GO

ALTER FULLTEXT INDEX ON [My_DB].[dbo].[Users] SET CHANGE_TRACKING AUTO;

GO

4:关于Sql Server的全文索引,我们可以参考MSDN来获取更多的内容: 

     http://msdn.microsoft.com/zh-cn/library/ms142571

你可能感兴趣的:(SQL Server)