
現在PL/SQL内にてSELECTを発行しています。
環境はoracle 11g、WinServer2008です。
SQLは下記になります。
SELECT
*
FROM
TABLE_VIEW TV1
WHERE
DAY_F <= kijun_dt AND
DAYT >= kijun_dt ;
kijun_dtは変数で渡しています。
質問は、kijun_dtを変数で渡すと処理が5秒くらいかかってしまうのですが
'2012/03/01'のように固定すると一瞬で返ってきます。
型は日付型できちんとわたっており、
他のテーブル(view)でも同じように変数で渡している箇所が
あるのですが、結果は一瞬え返ってきます。
統計情報の更新、マテリアライズド・ビューを作成し使用などしてみましたが
どうしても遅くなる原因が特定できません。
似たような現象になった、または何か情報をお持ちの方、
ご回答を宜しくお願い致します。
足りない情報等御座いましたら書ける範囲で出しますので
よろしくおねがいします。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
#1さんに加えて。
統計情報があるため、固定値のリテラルではインデックスが効いて、バインド変数ではフルスキャンしている、などが考えられます。
(その日付項目のカーディナリティにより、逆の結果になる事もある)
また、件数の増減が激しいテーブルであれば、統計情報取得タイミングも考えないとダメでしょう。
リテラル版とバインド版で、それぞれトレースを取り、実行計画を比較してください。
施策の一つとしてはリテラル版に近い実行計画になるようなオプティマイザヒントを付与する事です。
トレースやオプティマイザヒントに関しては、OTNでパフォーマンスチューニング関係のマニュアルがダウンロードできるので、そちらを参考に。
実施環境が本番なのか、テスト環境なのか、も考慮する必要があります。
テスト環境で遅くても本番では速いかもしれないし、逆もまた然り。
No.1
- 回答日時:
とっさに思いつくのは
・テーブル側の型と変数の型が一致していない
・TABLE_VIEWの構造が複雑
・ここに書いていない条件がある
・テーブルのサイズ(列・行ともに)がおっきい
かな
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
likeとsubstrの使いわけについて
-
キャッシュを使わずにSELECTを...
-
WHERE句の実行順序
-
Selectの処理速度改善について
-
アナライズでほとんどの処理が...
-
あいまい検索のパフォーマンス...
-
ヒント句が無効になります
-
Accessのマクロでモジュールを...
-
SQL文のエラー
-
ODBCリンクの際にACCESSでは読...
-
callで順に実行されるプロシー...
-
Access VBAで行ラベルが定義さ...
-
sqlplusでヘッダーが付かない
-
SQLで部分的にGROUP BYしたいとき
-
重複するIDのデータを1行にま...
-
ストアドプロシジャからストア...
-
Statement ignored というエラー
-
SQLserver算術オーバーフロ...
-
エクセルVBAでUserFormを起動し...
-
OutlookVBAで作成したマクロに...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
キャッシュを使わずにSELECTを...
-
WHERE句の実行順序
-
likeとsubstrの使いわけについて
-
ヒント句が無効になります
-
あいまい検索のパフォーマンス...
-
Like文の速度について教えてく...
-
WHERE句はJOIN結合前結合後どち...
-
いつもお世話になってます。
-
パフォーマンスについて
-
問題解決のストーリーにて PDCA...
-
SQL ORDER BYにおける条件について
-
実行計画HASH JOIN RIGHT OUTER
-
計画力をつけるにはどうすれば...
-
表の結合(性能)
-
JOINの時のONとWHEREの違いにつ...
-
アナライズでほとんどの処理が...
-
実行計画の取得方法について
-
実行計画(EXPLAIN PLAN、AUTOT...
-
外部結合と等価結合のパフォー...
-
アナライズとヒント句
おすすめ情報