数据库是SQL Server 2005,已打上SP2。服务器的配置也不错,两台DELL 4Core*2/2G/36G SCSI,一台跑网站,一台跑数据库。
现在数据库服务器上就一个数据库,主要的表如下:1.产品基本表(904条记录,0.789MB)
2.产品特性表(3252条记录,7.281 MB)
3.产品规格表(2709条记录,3.039 MB)
4.产品新闻表(91条记录,0.680 MB)
5.产品专题介绍表(75条记录,0.742 MB)
6.“关于我们”表(399条记录,2.148 MB)
7.公司活动表(21条记录,0.133 MB)整个数据库也很小,20MB的样子。但是现在客户提出要全站搜索,于是对以上表进行全文索引,然后进行5次搜索,如下:(1)将上面的产品基本表、产品特性表、产品规格表进行UNION联合搜索,然后列出产品的搜索结果:SELECT productid, name FROM 产品基本表 WHERE (CONTAINS(产品名称, '要搜索的内容') OR CONTAINS(产品简介, '要搜索的内容') OR CONTAINS(产品卖点, '要搜索的内容') OR CONTAINS(产品标签, '要搜索的内容')) AND ifpublish >= 0
UNION
SELECT p.productid, p.name FROM 产品特性表 f INNER JOIN 产品基本表 p ON f.productid = p.productid WHERE (CONTAINS(f.产品特性标题, '要搜索的内容') OR CONTAINS(f.产品特性内容, '要搜索的内容')) AND p.ifpublish >= 0
UNION
SELECT p.productid, p.name FROM 产品规格表 s INNER JOIN 产品基本表 p ON s.productid = p.productid WHERE (CONTAINS(s.产品规格标题, '要搜索的内容') OR CONTAINS(s.产品规格内容, '要搜索的内容')) AND p.ifpublish >= 0
(2)搜索产品新闻:SELECT articleid, title FROM 产品新闻表 WHERE (CONTAINS(title, '要搜索的内容') OR CONTAINS(content, '要搜索的内容')) AND ifpublish >= 0
(3)搜索产品专题内容 SQL语句基本同上
(4)搜索关于我们 SQL语句基本同上
(5)搜索公司活动 SQL语句基本同上
整个搜索一共5个查询,分别将搜索结果放到5个数组中,然后循环数组,列出内容。但是现在遇到的问题是,第一次搜索会很慢,浏览器一直在等待,直到超时,但是数据库服务器的CPU占用以及内存占用均正常。超时后再刷新浏览器,就能够很快的出结果,搜索其他内容也很快出结果。但是如果一段时间不操作,再次进行搜索,又会出现第一次的现象,感觉像是全文搜索需要缓存索引。在此请教各位,这是什么原因造成的?应该如何解决?

解决方案 »

  1.   

    试试这个? 
    http://www.cnblogs.com/ami/archive/2008/03/18/1111875.html 建立全文索引后,使用Contains查询很快。搁置约几分钟;再次使用contains查询很慢,会超时,第2次则又快起来了。不久又如此。    sqlserver2005全文索引的缓存会被释放,如果才能保持? 
    初步解决方法是调整了全文索引服务的一个verify_signature属性,禁用。 
    SELECT fulltextserviceproperty('VerifySignature') 
    exec sp_fulltext_service verify_signature,0 
      

  2.   


    数据量比较小,根本就需要用全文索引直接用like or charindex 就ok
      

  3.   

    这个应该没问题 是不是服务商 限制了CPU 时间所以显得很慢