- ベストアンサー
処理速度の改善について
PL/SQLにて大量のデータを処理しているのですが、処理に時間が掛かりすぎる為、SQLのチューニングを考えています。 まずどういう所から見ていけば良いでしょうか? また、INDEXを指定すると良いのかな、と思うのですが、PL/SQL内でINDEXの指定は出来ますか? /*~*/でコメント文と見なされているように思うのですが。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
結合処理を行っているSQLはないですか? また、インデックスを作成しているのに使用できないようになっている(例えばWHERE句のインデックス列に関数が使用されている)SQLはないですか? データ件数がそれほど多くない場合、遅いSQL分の大半は結合処理だと思われます。 結合処理について実行計画を確認し、最適なパスになるようにヒント句を設定されてはいかがでしょうか。 また、ルールベースの場合、FROMに記述する表名の順番も実行計画に影響を与えるので、その辺についても確認されるとよいです。 実行計画の取得方法は、 1. あらかじめplan_tableを作成する。 SQL> @?/rdbms/admin/utlxplan.sql 2. 実行計画の取得 SQL> EXPLAIN PLAN FOR (調査対象のSQL文) 3. 実行計画の確認 SQL> SELECT LPAD(' ', 4 * (LEVEL - 1)) || operation || ' ' || options || ' ' || object_name || ' ' || DECODE(id, 0, 'Cost = ' || position) AS "Query Plan" FROM plan_table START WITH id = 0 CONNECT BY PRIOR id = parent_id ORDER BY id, position /
その他の回答 (1)
- OsieteG00
- ベストアンサー率35% (777/2173)
TKPROF等を使用したボトルネックの分析がまず最初ですね。 ・大量更新ならインデックスを削除してから更新->再作成 ・表設計そのもの。多少は正規化を戻して冗長化して、多数の表を扱わないようにする ・ループ回数のチェック(SQLの構造そのもの) ・インデックスの適切な付与 ・同じSQL文なら、大文字小文字やスペースも同じにする 奥は深いですが、 SQLの構造そのもの・・・60% データベースのチューニング・・・30% ハードのチューニング・・・10% といわれたことが有ります。頑張ってください。