新足迹

 找回密码
 注册

精华好帖回顾

· 星*--及几张重口味(41#加一张无敌日出) (2013-8-1) Wolongshan · 猎梦人谈交易中一些心理现象 (2010-10-10) 猎梦人
· 今天在childcare 看到一幕有感 (2008-11-11) chinara · cairns 7 days trip (2009-1-9) lilyliaus
Advertisement
Advertisement
查看: 1190|回复: 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
返回顶部