最近服务器很慢,sqlserver.exe使用率经常长时间达到100%,跟踪了下原来是
Select Top 5 TF_Id,TF_Class,TF_Title,TF_Note,TF_User,TF_Now from TabelFo where TF_Title like '%关键字%' or TF_Note like '%关键字%' Order by Id Desc
这个论坛语句出题,执行时间平均在5秒以上,分析了下,可能是因为TF_Note是文本字段的缘故,内容长检索量大,请教各位有没什么办法解决这个问题呢?当然别告诉我不要检索TF_Note这个字段哦,我需要的是必须要检索这个字段的方法咯~或者是什么变通的方法! 

解决方案 »

  1.   

    like '%关键字%'索引都失效  没什么好办法
      

  2.   

    ---无法使用索引的select语句
    1.对索引列使用了函数,如:
    select * from tb where max(id)=1002.对索引列使用了'%xx',如:
    select * from tb where id like '%1'
    需要注意的不是所有使用like关键字的select 语句都无法使用索引,比如
    select * from tb where id like '1%'就可以使用索引3.在where子句中对列进行类型转换(其实也是使用到了函数)4.在组合索引的第1列不是使用最多的列,如在下面3个查询语句中建立组合索引,按顺序包含col2,col1,id列;
    select * from tb where id='1' and col1='aa'
    select id,sum(col1) from tb group by id
    select * from tb where id='2' and col2='bb'
    则第一句和第二句无法使用到索引 所以需要注意组合索引的顺序5.在where 子句中使用in关键字的某些句子
    当在in关键字后面使用嵌套的select语句,将无法使用在该列上定义的索引
    如:
    select 
     *
    from
     ta 
    where
     id 
    in
     (select id from tb where ....)--这样可以用到索引
    select * from tb where id in('1','2')本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/fredrickhu/archive/2010/01/12/5183068.aspx
      

  3.   

    又是or,又是like。。你应该是text字段吧,建立全文索引吧
      

  4.   

    楼主的server有几颗cpu ?如果一颗的话,只能优化业务了,如果多颗,可以尝试该语句锁定只使用一颗cpu.
      

  5.   

    监测下,执行这条语句的耗时多少
    Select Top 5 TF_Id where TF_Title like '%关键字%' or TF_Note like '%关键字%' 
      

  6.   

    Select Top 5 TF_Id,TF_Class,TF_Title,TF_Note,TF_User,TF_Now from TabelFo where TF_Title+TF_Note like '%关键字%'  Order by Id Desc 
    效率会大大提升
      

  7.   

    like %% 这种语句在并发量上去后一般cpu就直接100%了
      

  8.   

    先判断第一个字符是否用通配符
    是 '%key%',
         如果是那就没办法了,只有做full-text search或优化业务
    否  'key%'  
         这个是不会破坏index的。  我想你做个判断不会每此都执行 '%key%',这样也会快很多。