Sqlserver 2008下添加全文索引,增加查询速度

在给客户开发的门户网站中用到了整站搜索功能,在上线一年多后,在将近20个频道中(20张表),由于数据量越来越大,从而导致关键字搜索越来越慢,搜索一次将近20s的时间。所以最近决定优化搜索功能。

首先想到的就是用数据库的全文索引。freetext 函数!最终从查询20s骤降到不到1s出结果。

在SQL Server 中提供了一种名为全文索引的技术,可以大大提高从长字符串里搜索数据的速度,不用在用like,IndexOf这样低效率的模糊查询了。

解决方案:


一、开启数据库全文索引功能,使用sp_fulltext_database打开此功能

execute sp_fulltext_database 'enable'

二、新建全文目录

全文目录名称:自己起个名即可;

所有者:选择dbo;

三、选择增加索引的表和列,确定即可

四、全文索引的SQL查询

1、CONTAINS 

搜索单个词和短语的精确或模糊的匹配项,要搜索的内容必须是个有意义的词语,比如说“苹果”、“建设厅”,不能是一些没意义的词语,比如“阿迪撒啊是”,“儿儿的”这样的词语即使LIKE是能查询出来,但全文索引对这样没意义的词语可能没有建立索引,查不出来

SELECT *   
FROM dbo.Table  
WHERE CONTAINS(title,'旅游') 

2、FREETEXT

和CONTAINS类似,不同的是它会先把要查询的词语先进性分词然后在查询匹配项

select *    
from dbo.Table
where freetext(title,'旅游')

3、CONTAINSTABLE

在查询方式上与 CONTAINS 几乎一样。但CONTAINSTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用 CONTAINSTABLE 的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。

SELECT  *  
FROM  Table AS FT_TBL  
        INNER JOIN CONTAINSTABLE(title, *, 'ISABOUT (婴儿 WEIGHT (.8),赤水 WEIGHT (.4) )')  
        AS KEY_TBL ON FT_TBL.tableid= KEY_TBL.[KEY]  
ORDER BY KEY_TBL.RANK DESC  

4、FREETEXTTABLE

在查询方式上与 FREETEXT 几乎一样。但 FREETEXTTABLE 返回的是符合查询条件的表,在 SQL 语句中我们可以把它当作一个普通的表来使用,并且使用  FREETEXT  的查询对每一行返回一个相关性排名值 (RANK) 和全文键 (KEY)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值