我有一个SQL
查询在Toad中的几秒钟内执行(< 4
),但使用8
(C#
运行时需要大约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);
我所提到的并没有帮助:
答案 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语句进行四次调用。