Oracle接続


ガオー  2008-11-21 22:58:31  No: 32671

Windows XP Pro
Delphi 7 Pro
Oracle 10g

Microsoft OLE DB Provider for Oracle接続
ADOQuery使用

以上の環境でSelect文で処理すると非常に時間がかかります。
なにか他の方法でコーディングすると
時間短縮できるでしょうか?


Ru  2008-11-21 23:15:48  No: 32672

テーブルの構造や数量,データ量,抽出条件,グループ,並び替え条件等々・・・

様々な状態を考えた上でテーブルにインデックス付けを行ってください。
検索速度を上げる為にはインデックスは重要です。
データ量が膨大になればなるほど処理速度が大きく変わります。
ただし間違ったインデックス付けをすると逆に遅くなったりします。

オラクルは触ったことがないのでインデックスの作成方法は知らないので,
別途調べてみてください。検索するだけで色々引っかかると思います。
Oracle CREATE INDEX


ガオー  2008-11-22 00:21:30  No: 32673

Ruさんお返事ありがとうございます。
後からで申し訳ありませんが、補足です。
SQL PlusでSELECT文処理すると瞬時に表示されて
Dephiからだと時間がかかるのですが
どうしてでしょうか?


Ru  2008-11-22 02:42:56  No: 32674

申し訳ないですがOracleやSQL Plusはわかりません。

インデックスの有無で大体解決はすると思いますが,
データ量が多かったり,SQLが複雑だと遅くなります。
あとは,検索スピード自体は早いがデータ量が多くて
Delphi上での表示に時間がかかるというのはあったと思います。
TClientDataSetの場合はデータ量が多いと比例して時間がかかります(クライアントのPCスペックに依存?)
Oracle,TADOQueryももしかするとそうかもしれません。
一度SQLでレコード数を制限してテストしてみればいかがでしょうか?

※SQLのサンプル(レコードを200に制限)
Oracleで使用できなかったらごめんなさい

SELECT *
FROM TABLENAME
FETCH FIRST 200 ROWS ONLY


ガオー  2008-11-26 21:11:10  No: 32675

Ruさんお返事遅れまして申し訳ありません。
>インデックスの有無で大体解決はすると思いますが
どのようにインデックスつければよいのでしょうか?


ガオー  2008-11-27 01:57:18  No: 32676

oo4oで接続テストしてみようと思うのですが、
SQL文にパラメーターは使えるのでしょうか?


GTR  2008-11-27 04:18:46  No: 32677

インデックスの付け方
CREATE INDEX インデックス名 ON テーブル名( 項目1,項目2 );
です。


通りすがお  2008-11-28 18:16:36  No: 32678

どれくらいの差があるのか明確に書くべきではないですか?
何件のデータ取得するのにADOQueryだとどれくらい遅いとか。
SELECT文のみ、WHERE句をいれて、ORDER句をいれて。
比較できるのは色々あります。あまりにも漠然としていてわかりません。

自分で調べる事がまず大事だと思います。
Ruさんが「Oracle CREATE INDEX」で検索すればと書いていますよね。
それで調べればインデックスのつけ方はわかるはずです。
基本GTRさんが書いている通りでWHERE句やORDER句に記述している項目に対してつけます。

あとoo4oに関しても「Delphi  oo4o」で調べれば色々でてきます。
その上でどうすればいいのかを質問するべきだと思います。

私もガオーさんと全く同じ環境で開発していますがQueryを使って特に
不便に感じたことはありません。
ADOQuery・oo4oそれぞれ一長一短ですので色々試してみてください。


たべ  2008-12-23 18:38:28  No: 32679

>SQL PlusでSELECT文処理すると瞬時に表示されて
>Dephiからだと時間がかかるのですが

SQLの返すレコードが多すぎるのではないでしょうか。
試しに結果が10件程度となるSQLを投げてみたらどうでしょう。

ちなみに、レコードを非同期で取得したい場合は、
以下が参考になるのではないでしょうか。

http://docs.codegear.com/docs/radstudio/radstudio2007/RS2007_helpupdates/HUpdate4/JA/html/devwin32/adofetchingrecordsasynchronously_xml.html


Mr.XRAY  URL  2008-12-23 23:54:55  No: 32680

>SQL PlusでSELECT文処理すると瞬時に表示されて
>Dephiからだと時間がかかるのですが

これは,SQL Plus(Oracle附属のSQLテスト用の?)で同じSQL文を
実行したということなんでしょうか.
もし,そうだとしたら分かりません.

一般的に言えることですが,Oracleではインデックスを設定しないと,
ほとんど実用的な速度は得られないと考えていいのではないかと思います.

>試しに結果が10件程度となるSQLを投げてみたらどうでしょう。

もテストする価値がありますね.


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加