建个索引试试,应有性能提升.create index ix_tbMyMaterial_MyMatName_MyMatTagIds on tb_MyMaterial(MyMat_Name,MyMatTagIds) include(isid)
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%' 不走索引
单独建立个表
储存格式为
1
2
3
...
要优化,一般可以考虑建索引,比如在MyMat_Name 字段和MyMatTagIds 字段,这2个字段,进行过滤。但是由于你在查询的时候,用的like '%1%' 那么,会导致就算建了索引,查询在运行的时候,也不会去用索引。你这种情况,可以考虑用全文检索技术,可以看看我写的这个全文检索的文章:
http://blog.csdn.net/sqlserverdiscovery/article/details/11091851
on tb_MyMaterial(MyMat_Name,MyMatTagIds) include(isid)
where MyMat_Name like 'qu%' and MyMatTagIds like '1%' and MyMatTagIds like '2%'
--like '%qu%' 修改为 like 'qu%' 其他同理
--like '%qu%' 不走索引
这个表设计也不对,例如:如果有一天,Id=1 的 MyMatTagNames 改成 别的类别名字,那么旧的记录那些名字你怎么办 ?
还有不能靠感觉,例如:“我觉得可能太慢“,要不你试一试再说。建议修改表的设计。
要优化,一般可以考虑建索引,比如在MyMat_Name 字段和MyMatTagIds 字段,这2个字段,进行过滤。但是由于你在查询的时候,用的like '%1%' 那么,会导致就算建了索引,查询在运行的时候,也不会去用索引。你这种情况,可以考虑用全文检索技术,可以看看我写的这个全文检索的文章:
http://blog.csdn.net/sqlserverdiscovery/article/details/11091851其实全模糊匹配的话,建立了索引,也不能说用不到索引(这里也不是说咬文嚼字),
相比表扫描,假如查询字段上有索引,是索引扫描,
说用不到索引,但确实走了一个索引扫描,跟表扫描相比,效率上会有一点差别的http://www.cnblogs.com/lyhabc/p/3378753.html