场景如下:
.net 4 + silverlight5 +wcf ria services + sql2008
问题:
有两张表
表名:A (203万条记录)
表名:B (65万条记录)
表名:C (10万条以内)
linq to entities语句如下:
Expression<Func<A,bool>> exp=m=>true;
List<A> lista= this.ObjectContrxt.A.Where(m.Compile()).Take(100).tolist;
查询结果:
表A 偶尔在5分钟内能完成,多数超时: 同时sql服务器内存疯涨1.5G以上。
表B 可在50秒内完成。
表C总可以在30秒内完成。无错。
假如把
List<A> lista= this.ObjectContrxt.A.Where(m.Compile()).Take(100).tolist;
改成这样,就是不用expression
List<A> lista= this.ObjectContrxt.A.Where(m=>true).Take(100).tolist;
30秒内有结果,无错。
最怪的还在下面:
List<A> lista= this.ObjectContrxt.A.Where(m=>m.xm.Contains("圆")).Take(100).tolist;
这个30秒内完成,如果改成
List<A> lista= this.ObjectContrxt.A.Where(m=>m.xm.Contains("圆圆")).Take(100).tolist;
多一个原字,60秒内也能完成,再查一次30秒内能完成,但如果改成“高圆圆”,像这样
List<A> lista= this.ObjectContrxt.A.Where(m=>m.xm.Contains("高圆圆")).Take(100).tolist;
那么又变成5分钟内不能完成。
我的需求是必须用到expression和contains 如何解决?
难道表记录一多,EF就不好使了?
慕姐4208626