新足迹

 找回密码
 注册

精华好帖回顾

· 我的第二故乡征文-悉尼的AUBURN--宇宙的焦点-想了解AUBURN的先來這 (2010-9-4) hsqhugh · 美食接龙 -- Chicken with ham and cheese, 美讶接招! (2007-12-16) datou2z
· 包子制作全程图解 (2010-6-9) 忙碌 · 一个女中学生的往事之足球篇 (2008-3-2) 老实和尚
Advertisement
Advertisement
查看: 1191|回复: 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
返回顶部