【问题标题】:Oracle query fast in sqldeveloper, slow in asp.netsqldeveloper中的oracle查询快,asp.net中的慢
【发布时间】:2012-07-17 21:31:01
【问题描述】:

我想执行以下查询并将其放在我的 asp.net 应用程序中的 gridview 上

select *
from INDICATORS, places, places_sales
where places_sales.id = places.id
and 
INDICATORS.line  in (select line from lines)

lines 表有 28000 条记录,INDICATORS 有 18000 条

这个查询在 oracle sql developer 中执行需要 6 秒,但在我的 asp.net 应用程序中(使用 oracle dataacess 作为连接器)需要大约 20 分钟

有没有办法优化我的查询?

【问题讨论】:

  • 您确定查询在 asp.net 中有那么慢,还是您将所有结果呈现到浏览器窗口,而这是花费大部分时间的原因?
  • @hmqcnoesy 你是对的,我调试了我的代码,最耗时的是将结果渲染到一个网格视图中,即使我的网格视图是分页的:S 我该如何解决这个问题?
  • 因为默认pl sql developer不获取所有结果,这可能是原因
  • 在查询本身上实现分页(可能在 WHERE 子句中)——也就是说,每次填充 Gridview 控件时只获取一个数据子集。现在,您正在抓取所有数据,即使在 Gridview 中启用了分页,它仍然必须处理所有这些数据。
  • 禁用控件中的绘画,直到您完成填充它,然后重新启用绘画。不确定这在您的控件中是否可行,但在我们过去使用的电子表格控件中解决了很多性能问题。

标签: c# asp.net sql oracle


【解决方案1】:

您可以采取一些措施来加快速度。

首先,places或places_sales与INDICATORS之间是否存在连接?

如果有,你应该添加它,你可能得到一个笛卡尔。

现在,对于优化部分,请尝试以下操作:

SELECT *
  FROM indicators, places, places_sales
 WHERE places_sales.id = places.id
       AND EXISTS
               (SELECT ''
                  FROM lines l
                 WHERE l.line = indicators.line)

【讨论】:

【解决方案2】:

我的建议是您将 GridView 与分页一起使用

请查看链接了解更多关于 GridView 的分页http://msdn.microsoft.com/en-us/library/5aw1xfh3.aspx

一个很好的例子可以在这里找到http://www.dotnetcurry.com/ShowArticle.aspx?ID=339

【讨论】:

    【解决方案3】:

    我建议在表中放置并创建一个索引,以便查询更加流畅。
    使用类型 CLUSTERED look this

    我真的就像一张超过 60000 行的表,并且索引将其排序

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多