dポイントプレゼントキャンペーン実施中!

Oracle初心者です。

以下のような2種類のSQLをSQLPLUSで実行し、
実行計画を取得しました。
end_timeでfilterをかける際に、"TABLE ACCESS FULL"となっており、貼っているインデックスが使われていないことがわかりました。
#これがSQLの遅い主要因と考えています。。。。勘です。

インデックスが活用されていない原因としてはどのようなものが考えられるのでしょうか。
宜しくお願いいたします。

1)
set autotrace traceonly
select * from t_sample
where end_time >= '2009-08-25'
and end_time <= '2009-11-26'

2)
set autotrace traceonly
select * from t_sample
where end_time >= to_date('2009-08-25', 'yyyy-mm-dd')
and end_time <= to_date('2009-11-26', 'yyyy-mm-dd')

A 回答 (2件)

テーブルの中身を知らないので何ともいえませんが


インデックスの基礎知識として選択の結果が15%以下でないと
使用する意味がないとされています。

ということで単純にSQLを実行した結果の選択行数がおおいから
フルスキャンの方が早いと判断されただけではないでしょうかね?
is nullで索引が効かなくなるといわれているのもこれと同じ理由です。

遅いというのならば索引の付け方が間違えているとかかなぁ?
    • good
    • 0
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A