none
帮忙出出主意优化一下数据库,模糊搜索超级慢,总是超时 RRS feed

  • 问题

  • 因为网站需要做搜索,现在数据大概15000条左右吧,总是超时,你们帮我出出主意应该怎么弄一下,谢谢

    以下是搜索的时候用的存储过程

    USE [101minecom]
    GO
    /****** 对象: StoredProcedure [101minecom].[P_Fulltext]  脚本日期: 06/03/2010 13:37:33 ******/
    SET ANSI_NULLS OFF
    GO
    SET QUOTED_IDENTIFIER OFF
    GO
    CREATE PROCEDURE [101minecom].[P_Fulltext] @searchstr varchar(50)
    AS
    /*首页搜索与搜索页搜索*/
    select top 25 * from (
    select newsid as id,title,convert(varchar(1000),content) as content,convert(varchar(30),adddate,23) as postdate,kind='readnews.aspx',hit from v_news where title like '%'+@searchstr+'%' or content like '%'+@searchstr+'%'
    union all
    select id,title,convert(varchar(1000),content) as content,convert(varchar(30),adddate,23) as postdate,kind='showvideo.aspx',hit from v_video where title like '%'+@searchstr+'%' or content like '%'+@searchstr+'%'
    union all
    select id,title,convert(varchar(1000),content) as content,convert(varchar(30),postdate,23) as postdate,kind='readarticle.aspx',hit from v_article where title like '%'+@searchstr+'%' or content like '%'+@searchstr+'%'
    union all
    select id,title,convert(varchar(1000),content) as content,convert(varchar(30),postdate,23) as postdate,kind='readsupply.aspx',hit from v_supply where title like '%'+@searchstr+'%' or content like '%'+@searchstr+'%'
    ) x order by hit desc,postdate desc
    2010年6月3日 7:21

答案

全部回复

  • 建议使用全文检索。详情请参见SQL Server自带的联机丛书。
    想不想时已是想,不如不想都不想。
    2010年6月3日 10:06
    版主
  • 15000都超时慢,那若150万或更多就只有等天亮啦

    可试下全文索引<不见得全文索引适合所有情况>

    改写下查询语法:

      将Top 25分别放入每个查询,最后再Top 25,结果也是一样,这样就减少搜索内容

     


    Try SQL Server 2008 QQ:315054403 dgdba@hotmail.com
    2010年6月4日 4:09
  • 这种全 like 的查询, 应该考虑用全文检索, 或者是其他一些专门的检索工具来做了.
    2010年6月4日 4:38
  • 这种全 like 的查询, 应该考虑用全文检索, 或者是其他一些专门的检索工具来做了.

    我刚才自己在本地做了测试了,全文搜索能达到秒杀,只需要1秒,但因为我用的是虚拟主机,人家不给开全文搜索。有那些专门的检索工具呢?能否推荐一下,或是几篇文章。谢谢
    2010年6月4日 7:07
  • 第三方工具是需要部署到服务器的,如果你是虚拟主机,那就没戏了.


    http://blog.csdn.net/cn_sql
    2010年6月4日 7:18
    版主