やや低速なネットワーク リンクを介して接続する 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 はこの問題をどのように回避していますか? また、どうすれば同じことを行うことができますか?