SQL Query在C#中执行速度慢,但在Toad中执行速度很快

时间:2015-08-26 09:56:49

标签: c# .net oracle oracle11g toad

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

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

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);

我所提到的并没有帮助:

2 个答案:

答案 0 :(得分:1)

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分钟令人震惊,但作为第一次通过切换你的司机,看看有多接近你。

答案 1 :(得分:0)

试试这个

使用存储过程而不是Query。

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

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

存储过程提供了改进的性能,因为需要将更少的调用发送到数据库。

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