数据库使用的SQLSERVER2005,其中有一个表TEMP:1、有字段A,字段B,字段C,字段D,字段1,字段2,字段3.。2、字段A,字段B,字段C,字段D 分别建立了索引;字段类型均为varchar3、表记录数大概在50万~80万要查询记录时使用多个字段like查询,语句如下:
SELECT * FROM TEMP WHERE 字段1 LIKE 'xxx' or  字段2 LIKE 'xxx' or  字段3 LIKE 'xxx' or 字段4 LIKE 'xxx'现在的情况很明显就是性能很低下,请问针对这种应用应该如何提供查询性能呢?大家目前都采用什么方案来解决?请高手指教,谢谢!

解决方案 »

  1.   

    LIKE里不加通配符"%","_"的话,为何不用"字段=[值]"就行了呢?
      

  2.   

    如果是 columnname like 'xxx' 而不是 columnname like '%xxx%',那不如用 columnname='xxx'.
    如果是后者,那就没办法了.去一个字段值里去查找一些字串,是没办法利用索引的.
      

  3.   

    A B C D建了索引,查询是 1 2 3 4.。。
    这样的LIKE在2005不会走索引,在2008有可能,看数据分布
    通常这样的条件查询只有走表扫描
      

  4.   

    不好意思,写错了,带前后%号的
    SELECT * FROM TEMP WHERE 字段1 LIKE '%xxx%' or 字段2 LIKE '%xxx%' or 字段3 LIKE '%xxx%' or 字段4 LIKE '%xxx%'
      

  5.   

    那恐怕就帮不了你了.
    能不用 link 的地方,尽量不用,否则性能会大受影响.
      

  6.   

    其实,Like '%xxx%' 跟 Like 'xxx%' 是有差别的,
    后者是可以用到索引的.所以楼主看能否改成 Like 'xxx%'的形式?
      

  7.   

    什么样的几十万条的数据需要like查询?
      

  8.   

    可能要使用全文索引,不过mssql的全文索引据说一般般
      

  9.   

    可能的话,是否可以调整Where中的条件的先后次序,把命中率高的条件放前面?
      

  10.   

    用全文索引吧,据说性能一般,但是会比你那4个like好。