【问题标题】:SQL Query executes slow in C#, but fast in ToadSQL Query 在 C# 中执行速度很慢,但在 Toad 中执行速度很快
【发布时间】:2015-11-20 07:19:07
【问题描述】:

我有一个 SQL 查询,它在 Toad 中几秒钟内执行 (< 4),但使用 C# (System.Data) 运行时需要大约 8 分钟。

可能是什么原因?如何解决?

SQL查询

SELECT TAB1.COL1, TAB1.COL2  
FROM   TAB1, TAB2 
WHERE  TAB1.COL1 = TAB2.COL1 
AND    COL2 IN (...)

C#代码

this.DbAdapter.Select(cmdText, dbparams,
                      "TAB1", this.dbConnection.Transaction);

我已经提到但没有帮助:

【问题讨论】:

  • 数据量是多少? Toad 是否真的在加载所有内容?
  • 你为什么不用join?
  • 您没有提供足够的代码来给出合理的答案。您的 c# 代码似乎在事务中运行?您是否在事务中的 Toad 中运行查询?
  • @DanielKelly 在 toad 中仅运行此查询。在代码中,我的交易值为 NULL。如果您需要更多信息,请告诉我
  • @nvoigt 是 Toad 加载所有 200 行

标签: c# .net oracle oracle11g toad


【解决方案1】:

试试这个

使用存储过程而不是查询。

存储过程编译一次并以可执行形式存储,因此过程调用快速高效。可执行代码会自动缓存并在用户之间共享。这降低了内存需求和调用开销。

通过对 SQL 语句进行分组,存储过程允许通过一次调用来执行它们。这最大限度地减少了慢速网络的使用,减少了网络流量,并缩短了往返响应时间。

存储过程提高了性能,因为需要向数据库发送的调用更少。

例如,如果一个存储过程在代码中有四个 SQL 语句,那么只需要对数据库进行一次调用,而不是对每个单独的 SQL 语句进行四次调用。

【讨论】:

    【解决方案2】:

    System.Data.OracleClient 被贬低和可怕。使用 Oracle 的 ODP.net(如果您可以控制或知道已部署机器上的客户端设置)、托管 ODP.net(如果您无法控制将运行程序的机器上的客户端)或 Dev Art 的 dotConnect for Oracle。

    http://www.oracle.com/technetwork/topics/dotnet/index-085163.html

    我以前使用过 System.Data.OracleClient,出现了各种神秘的停顿、延迟和无法解释的现象。例如,简单地调用绑定变量会导致任何查询的执行延迟 17 秒(我们对其进行了计时)。

    诚然,8 分钟是令人震惊的,但作为第一次通过,请切换您的驱动程序,看看它离您有多近。

    【讨论】:

    • 从 System.Data.OracleClient 更改为 ODP 将是一项艰巨的任务,因为它是一个遗留项目......所以至少现在不能这样做......
    猜你喜欢
    • 2021-05-02
    • 1970-01-01
    • 1970-01-01
    • 2018-07-19
    • 1970-01-01
    • 2020-01-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-08
    相关资源
    最近更新 更多