Oracle客户端似乎正在为每行传输所有4000个varchar字符

本文关键字:传输 4000个 字符 varchar 客户端 Oracle | 更新日期: 2023-09-27 17:51:12

我有一个Oracle数据库,我连接到一个有点慢的网络链接。在这里,我有一个简单的表格,类似于这个:

create table EMPLOYEES (
    employee_id INTEGER PRIMARY KEY,
    first_name VARCHAR2(4000)
);

和我使用一个相当无聊的查询检索所有行从它:

select employee_id, first_name from EMPLOYEES

到目前为止一切顺利。但是,我注意到,当我要求Toad导出该查询产生的所有行时,大约需要4秒钟。在我的。net应用程序中,它需要130秒。经过相当多的修改后,我注意到FIRST_NAME列中最长的值有50个字符长,因此我将查询修改如下:

select employee_id, substr(first_name, 1, 50) from EMPLOYEES

现在,它在Toad和我的c#/中都非常快。网络程序。我已经使用微软和Oracle的数据提供程序库进行了尝试,结果相同。

这是怎么回事?Oracle——正如我怀疑的那样——真的为每行发送4000字节,让客户端把它们切成合适的长度吗?那么"varchar"中的"var"有什么意义呢?此外,Toad是如何解决这个问题的,我又如何做同样的事情呢?

Oracle客户端似乎正在为每行传输所有4000个varchar字符

不,Oracle没有发送4000字节。让我们假设您确实在对Toad中的所有记录进行假脱机处理。Toad所做的就是获取记录并将它们打印到屏幕上的网格中?你的代码在做什么?SQL可以在相同的时间内运行,但是您的代码正在执行一些其他处理,这会增加时间。

要真正知道发生了什么,你需要做一两件事。

首先,执行SQLNet客户机跟踪。如果不能提供答案,则需要为会话执行服务器跟踪。