解决方案 »

  1.   

    换全文索引或者用第三方软件实现你这种模糊查询吧,where MyMat_Name like '%qu%' and MyMatTagIds like '%1%' and MyMatTagIds like '%2%'→表扫描
      

  2.   

    为MyMatTagIds
    单独建立个表
    储存格式为
    1
    2
    3
    ...
      

  3.   

    查找的时候最起码不要在where xx like '1%'这种中的1前面使用%,不然丢失索引,性能肯定不高
      

  4.   


    要优化,一般可以考虑建索引,比如在MyMat_Name 字段和MyMatTagIds 字段,这2个字段,进行过滤。但是由于你在查询的时候,用的like '%1%' 那么,会导致就算建了索引,查询在运行的时候,也不会去用索引。你这种情况,可以考虑用全文检索技术,可以看看我写的这个全文检索的文章:
    http://blog.csdn.net/sqlserverdiscovery/article/details/11091851
      

  5.   

    如果是sql的话,直接用sql的语句分析功能来试试,它直接能根据你的语句分析出相应的需要加索引的地方,并生成相应的语句。简单方便!
      

  6.   

    建个索引试试,应有性能提升.create index ix_tbMyMaterial_MyMatName_MyMatTagIds
     on tb_MyMaterial(MyMat_Name,MyMatTagIds) include(isid)
      

  7.   

    create index ix_tbMyMaterial_MyMatName_MyMatTagIds on tb_MyMaterial(MyMat_Name,MyMatTagIds) include(isid)select isid,MyMat_Name from tb_MyMaterial
     where MyMat_Name like 'qu%' and MyMatTagIds like '1%' and MyMatTagIds like '2%'
    --like '%qu%' 修改为 like 'qu%' 其他同理
    --like '%qu%' 不走索引
      

  8.   

    这个语句本身就不对,例如:MyMatTagIds like '%1%' , 如何id 是11的话,那也是你要的吗?
    这个表设计也不对,例如:如果有一天,Id=1 的 MyMatTagNames 改成 别的类别名字,那么旧的记录那些名字你怎么办 ?
    还有不能靠感觉,例如:“我觉得可能太慢“,要不你试一试再说。建议修改表的设计。
      

  9.   


    要优化,一般可以考虑建索引,比如在MyMat_Name 字段和MyMatTagIds 字段,这2个字段,进行过滤。但是由于你在查询的时候,用的like '%1%' 那么,会导致就算建了索引,查询在运行的时候,也不会去用索引。你这种情况,可以考虑用全文检索技术,可以看看我写的这个全文检索的文章:
    http://blog.csdn.net/sqlserverdiscovery/article/details/11091851其实全模糊匹配的话,建立了索引,也不能说用不到索引(这里也不是说咬文嚼字),
    相比表扫描,假如查询字段上有索引,是索引扫描,
    说用不到索引,但确实走了一个索引扫描,跟表扫描相比,效率上会有一点差别的http://www.cnblogs.com/lyhabc/p/3378753.html