新足迹

 找回密码
 注册

精华好帖回顾

· 南澳阿德,袋鼠岛,蓝湖9日游(完结) (2011-10-27) kate555 · The Five People You Meet in Heaven (By Mitch Albom) (2009-4-17) youyousandy
· 更新完毕。大阪奈良匆匆一游 - 奈良 (2015-1-6) 没有袖子的汗衫 · [美食接龙]第4棒: tritri之经典美味吮指虾 - 接棒食材- 蒜- tintin1976请接棒 (2009-6-6) tritri
Advertisement
Advertisement
查看: 1192|回复: 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
返回顶部