我有一个 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#/.NET 程序中都非常快。我已经尝试过使用 Microsoft 和 Oracle 的数据提供程序库,结果相同。
这里发生了什么 ?Oracle - 正如我所怀疑的那样 - 真的为每行发送 4000 个字节,让客户端将它们削减到正确的长度吗?那么“varchar”中的“var”有什么意义呢?另外,Toad 是如何解决这个问题的,我该如何做同样的事情?