2

900,000レコードのテーブル(MEN)があります。

このテーブルには、フィールド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

4

3 に答える 3

5

選択でインデックス名(My_in)を使用しません。データベース自体がインデックスを使用することを理解します。したがって、最初の例と同じ選択を行う必要があります。

于 2010-11-09T14:45:28.240 に答える
1

これは有効な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');

EXPLAINPLANに関するOracleのドキュメントをご覧ください。これと他の多くのSQL最適化に役立ちます。

于 2010-11-09T14:44:51.233 に答える
1

クエリで

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')
于 2010-11-09T14:45:48.597 に答える