Oracle 11gの質問のインデックス
質問
900,000のレコードを持つテーブル(男性)があります。
このテーブルにはフィールドがあります IP
と Tdate
.
クエリを実行したとき:
select * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
結果が得られるまで長い時間がかかります。
私はこのようなインデックスを作ろうとしています:
create index
my_in
on
MEN (IP,Tdate );
しかし、クエリを実行して高速な結果を得るにはどうすればよいですか?
私はこれを試しています:
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
エラーを取得します: ORA-00904
解決
選択でインデックス名(my_in)を使用しません。データベース自体は、インデックスを使用するために把握します。したがって、最初の例と同じ選択を行う必要があります。
他のヒント
クエリで
select My_in from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
my_inはインデックス名です。インデックスの使用を強制したい場合は、クエリを示唆することができます
select /*+INDEX(My_in MEN) */ * from MEN where IP = '1.1.1.1' and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY')
それは有効なSQLではありません。 My_in
インデックスの名前です。
で再試行してください:
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
または、サーバーが新しく作成されたインデックスを使用してプランを使用するかどうかを知りたい場合は、の出力を検査できます explain
指図:
explain plan for
select *
from MEN
where IP = '1.1.1.1'
and Tdate = TO_DATE('07/04/2010', 'DD/MM/YYYY');
Oracleのドキュメントをご覧ください 計画を説明します. 。これと他の多くのSQLの最適化に役立ちます。
所属していません StackOverflow