[pgsql-jp: 36934] VBからの検索が異様に遅い

taira taira @ blessroad.co.jp
2006年 3月 28日 (火) 10:27:12 JST


タイラと申します。

現在VB6.0からADO接続にて更新プログラムを組んでいます。
VBからのネットワーク越しの検索などが異様に遅くなってしまいます。
なにか対策や良い方法などあればご教示ねがいます。

サーバー側:OS WindowsXP Pro PostgreSQL-8.1.3 ADSL回線
テーブル:uriage (行数 約47,000件)
CREATE TABLE uriage
(
  ten_cd char(2) NOT NULL,
  yy char(4) NOT NULL,
  mm char(2) NOT NULL,
  dd char(2) NOT NULL,
  cd1 char(1) NOT NULL,
  cd2 char(1) NOT NULL,
  cd3 char(1) NOT NULL,
  cd4 char(1) NOT NULL,
  su int8 DEFAULT 0,
  kin int8 DEFAULT 0,
  CONSTRAINT uriage_pkey PRIMARY KEY (ten_cd, yy, mm, dd, cd1,
cd2, cd3, cd4)
) 
WITHOUT OIDS;
ALTER TABLE uriage OWNER TO postgres;


インターネット越しのクライアントPCから接続しています。
VBでの接続〜検索のプログラムは以下のようにしています。
    '----------< マスタに接続 >----------------------------------
    Set pg_Connect = New ADODB.Connection
    pg_Connect.ConnectionString = "Provider=MSDASQL;DRIVER=PostgreSQL;" _
                    & "SERVER=" & ServerIP & ";DATABASE=" & Db_Name & ";UID=" & PostgresID & ";PWD=" & PostgresPASS & ";"
    pg_Connect.CursorLocation = adUseClient
    pg_Connect.Open
    '----------< マスタ検索 >----------------------------------
    SQL_String="SELECT * from uriage where ten_cd = '01'" _
               & " and yy = '2006' and mm = '03' and dd = '09'" _
               & " and cd1 = '1' and cd2 = '0' and cd3 = '0' and cd4 = '0'"
    Set rs_query = New ADODB.Recordset
    rs_query.CursorLocation = adUseClient
    rs_query.Source = SQL_String
    rs_query.ActiveConnection = pg_Connect
    rs_query.CursorType = adOpenStatic
    rs_query.LockType = adLockOptimistic
    rs_query.Open

この処理でSQLクエリを行うと、検索に5〜10分かかってしまいます。


ちなみに、同じクライアントPCからpgAdminIIIで同じSQLクエリを実行すると、
以下のような速度です。
-- クエリーの実行:
SELECT * from uriage where ten_cd = '01' and yy = '2006' and mm = '03'
and dd = '09' and cd1 = '1' and cd2 = '0' and cd3 = '0' and cd4 = '0'

クエリー全体 実行時間:90 ms.
データ検索 実行時間:2274 ms.
1 行検索しました


また、サーバー上で上記のVBプログラムを動かすと2〜3秒で検索結果が返って
きますので、ネットワーク越しのVBだけ遅くなってしまうようです。


-- 
taira <taira @ blessroad.co.jp>




pgsql-jp メーリングリストの案内