質問

900,000のレコードを持つテーブル(男性)があります。

このテーブルにはフィールドがあります IPTdate.

クエリを実行したとき:

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の最適化に役立ちます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top