3

我有一个在 sql 编辑器(oracle)中执行时运行速度超快的查询:1ms。

由 DataSet-TableAdapter 执行相同的查询(作为存储过程)需要 2 秒。我只是检索20行。

由于我使用的是 TableAdapter,因此返回值存储在 ref 游标中。

如果我要获取 2'000 行,我可以理解构建 DataSet 需要一些时间,但仅 20 行的 2 秒对我来说似乎太多了。

有更好的方法在 oracle 上执行 SP,或者这是唯一的方法?我可以尝试做些什么来提高性能?

谢谢你的帮助!


在 google 中搜索,似乎问题出在 refcursor 上。其他人面临同样的性能问题,但没有提供解决方案。

4

4 回答 4

2

您使用哪个数据提供商?

您是参考 System.Data.OracleClient 还是使用 odp.net(Oracle 用于将 .NET 应用程序与 Oracle 连接的数据提供程序)还是使用 devart(以前称为 corelab)提供程序。

我在 odp.net 与 Oracle 9 结合方面有很好的经验。您可以在 oracle 网站上免费下载 odp.net。请参阅:http ://www.oracle.com/technology/tech/windows/odpnet/index.html

您可以使用最新版本 (11.1.0.6.20) 连接到 Oracle 9 数据库。

于 2008-12-10T11:28:25.493 回答
0

使用 datareader 而不是 TableAdaptor 需要多长时间?我会尝试数据阅读器。我从未遇到过数据读取器的问题。

于 2008-12-09T15:43:27.663 回答
0

确保将 设置CommandTypeCommandType.StoredProcedure

例如(来自MSDN):

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "COUNT_JOB_HISTORY";
cmd.CommandType = CommandType.StoredProcedure;
于 2008-12-10T07:42:37.383 回答
0

行。我发现了问题所在。

一开始我以为是DataProvided的问题,其实不是。我在 SQLServer 2000 中发现了同样的问题......

在谷歌搜索我发现了一些关于执行计划的信息。采用这种方式,我将查询性能提升了 50%。

问题的简要介绍是,当通过代码执行 SP 时,DBMS 的执行计划有一些问题,并且不使用索引......

更好的答案在这篇文章 中:SQL Server 中的参数嗅探(或欺骗)

我希望这能帮到您。

于 2008-12-12T10:45:27.450 回答