Gre*_*ter 10 .net oracle odp.net
我们使用ODP.NET在Oracle数据库上执行查询,通常它工作正常.但是,有一个特定的数据库,以及该数据库中的特定视图,我们无法从.NET完成查询.例如:
SELECT some_varchar_field FROM the_view WHERE ROWNUM < 5;
Run Code Online (Sandbox Code Playgroud)
如果我从Oracle SQL开发人员中执行此查询,则会在不到一秒的时间内完成.如果我使用ODP.NET从我们的.NET应用程序执行相同的查询,它会挂起并最终产生"ORA-03135:连接丢失联系"错误.我认为将其限制为几行可以消除它作为FetchSize问题的可能性.
我可以成功执行其他查询,但它们从我们的程序比从SQL Developer慢.再一次,我意识到SQL Developer最初只获取前50行的数据,但我认为ROWNUM条件取决于该等式.
Oracle SQL Developer使用的连接或命令与我们的应用程序使用的连接或命令有什么不同会导致速度差异?
不幸的是,我没有访问服务器(除了对它运行Oracle查询).
谢谢.
更新:我已经尝试与Microsoft的Oracle提供程序进行相同的查询,并且执行速度非常快.不幸的是,该提供商已被弃用,因此这不是一个长期解决方案.
Gre*_*ter 13
它与ODP.NET提供程序无关.问题是我们用来为我们创建连接的库(当然,Oracle SQL Developer没有使用它,我在尝试Microsoft提供程序时没有使用它)在执行任何操作之前总是执行以下语句:
ALTER SESSION SET NLS_COMP = LINGUISTIC
ALTER SESSION SET NLS_SORT = BINARY_CI
Run Code Online (Sandbox Code Playgroud)
这些使Oracle不区分大小写.但是,它们也使所有传统索引变得毫无用处.因为我们是从View查询的,所以它有内置的排序.而且因为我们不拥有数据库,所以我们无法使索引语言化来解决性能问题.
提供一种在这种(罕见)场景中不执行这些语句的方法可以解决问题.
立即想到的是
建议
| 归档时间: |
|
| 查看次数: |
14573 次 |
| 最近记录: |