首页 新闻 会员 周边

linq to entities

0
悬赏园豆:50 [已解决问题] 解决于 2012-03-23 15:12

场景如下:

.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就不好使了?

问题补充:

这个问题又查了很多资料,like'%A%'这种的查询是用不到索引的。

自由用户的主页 自由用户 | 初学一级 | 园豆:155
提问于:2012-03-16 16:52
< >
分享
最佳答案
0

这个应该是sql的问题吧!首先还是看看生成的sql语句。

应该你没有建立索引之类的问题。

收获园豆:25
小小刀 | 小虾三级 |园豆:1991 | 2012-03-16 20:00
其他回答(1)
1

建议你用profiler跟踪下,然后贴出sql脚本问题就找到了

收获园豆:25
today4king | 园豆:3499 (老鸟四级) | 2012-03-16 17:13

上面那两句代码本身有问题吗?

支持(0) 反对(0) 自由用户 | 园豆:155 (初学一级) | 2012-03-16 17:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册