问题是这样的,我在数据库上建立了一个全文索引,数据大概有几百万条,按照关键字进行索引,我把它分成了10个目录存放,用下面形式的sql进行查询select top 800 t1.MsgID,t1.Title,t1.ClassID,t1.ThisPath,t1.Tel,t1.Address,t1.Url,t1.Rectf,t1.CellPhone,t1.Oicq,t1.Msn from table t1 inner join containstable(table ,fulltext,'ISABOUT (关键字 weight(.9),分词关键字 weight(.2),分词关键字 weight(.2),分词关键字 weight(.8))',800) as t2 on t1.id=t2.[Key] Where t1.Deltf=0 order by t2.rank desc但是查询速度非常的慢,每换一个标题查询的速度基本都是超时会是20-30秒,如果读取800条信息的话,那它的IO比较固定是2400,物理IO大概为500-700,每次刷新也会产生这么多物理IO,不知道为什么.select field1,field2,field3,field4 from tb where contains(fulltext,'keywords') 这种方式速度也很慢,往往都是第一执行很慢,执行后刷新出现结果倒是挺快的.
全文索引重建过好几次了,也把这个全文目录放到了独立的硬盘,还是这样子,本地有一个50万记录的表,也用同样的办法测试,本地测试不会有这个问题,速度还是比较快的,希望大家帮我提一些解决方案,先谢谢了.

解决方案 »

  1.   

    我想每次都有物理IO,我想分割一部分内存做为虚拟硬盘来存放这些这个全文目录,全文目录大概是1个多G,每 个表3个字段,有上百个表,这样子是不是能提高一些速度?
      

  2.   


    select field1,field2,field3,field4 from tb where contains(fulltext,'keywords') 这种方式速度也很慢,往往都是第一执行很慢,执行后刷新出现结果倒是挺快的.
    这是因为计划缓存的原因,
      

  3.   

    恩,内存如果够大,感觉分个2G出来做虚拟硬盘也不错的,我以前也测试过把数据库放在remdisk建的磁盘上,写入速度和读取速度是会有提升的(读取后可能会写执行计划,缓存区也会有数据,但第一次读取指定sql的记录总比磁盘上来得快吧),我个人以为是这样子的.
      

  4.   

    望大家再帮忙看一下,谢谢了
    服务器状况:
    数据库是Sql Server 2005
    CPU使用率良好
    内存比较还算比较大的,应该不会是这个问题
    数据库和全文目录是分盘存放的.
      

  5.   

    哪位高人指点一下啊,为什么千万级别的数据在后台使用sql语句执行非常快,在系统中运行为何慢的和蜗牛似的,顶啊