新足迹

 找回密码
 注册

精华好帖回顾

· [败家媳妇]_领着我后宫的美娇娘们来拜见各位美妞们啦--后宫风云又起 (2011-8-7) 农村银的媳妇 · SOLD : 实况转播建房贴 (2013-7-18) shangpin
· 三鲜烩面,响油芦笋,椰丝轻乳酪蛋糕... (2010-11-12) 黑巧克力 · 偶也来发点吧~ (2006-12-28) 飞行
Advertisement
Advertisement
查看: 1370|回复: 3

数据库查询性能的问题 [复制链接]

发表于 2013-8-7 23:57 |显示全部楼层
此文章由 什么东西 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 什么东西 所有!转贴必须注明作者、出处和本声明,并保持内容完整
C#, linq to sql 的
现在的问题是, 查询数据库,得到一批数据记录,然后foreach循环这一批记录,根据每一条记录的不同类别,进行相关的再次查询,大概的代码结构如下:


      var items = (from n in ctx.table select n).toList();

      foreach(var item in items)
     {
            var x = from n in ctx.tableB where id == item.id select n;
     }

但是发现查询速度相当之慢,并经常有transaction 超时的报错

请问这样的话,如何提高查询性能?  或者应该用 stored procedure来代替?
Advertisement
Advertisement

发表于 2013-8-8 01:23 |显示全部楼层
此文章由 renzaixini 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 renzaixini 所有!转贴必须注明作者、出处和本声明,并保持内容完整
用foreach效率太低 你看profiler看看就知道了 foreach里面每条执行都是一个db connection
最有效查询是用join
如果 table 和tableB没有外键的话 可以把item.id select出来 然后再tableB的查询用contain方法
这样再profiler中就是用 in的单条查询

希望我的表达你能看明白

评分

参与人数 2积分 +6 收起 理由
cloud226 + 3 我很赞同
什么东西 + 3 感谢分享

查看全部评分

发表于 2013-8-8 09:14 |显示全部楼层
此文章由 什么东西 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 什么东西 所有!转贴必须注明作者、出处和本声明,并保持内容完整
renzaixini 发表于 2013-8-8 00:23
用foreach效率太低 你看profiler看看就知道了 foreach里面每条执行都是一个db connection
最有效查询是用jo ...

写的很清楚,非常感谢

发表于 2013-8-8 23:15 |显示全部楼层
此文章由 melmonash 原创或转贴,不代表本站立场和观点,版权归 oursteps.com.au 和作者 melmonash 所有!转贴必须注明作者、出处和本声明,并保持内容完整
学习了

发表回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Advertisement
Advertisement
返回顶部