sql >> データベース >  >> RDS >> Oracle

このクエリにインデックスが使用されないのはなぜですか?

    更新: col列をNOTNULLにしてみてください。それがインデックスを使用しない理由です。 nullでない場合は、ここに計画があります。

    SELECT STATEMENT, GOAL = ALL_ROWS           69  10  30
                        HASH GROUP BY           69  10  30
     INDEX FAST FULL SCAN   SANDBOX TEST_INDEX  56  98072   294216
    

    オプティマイザーがインデックスを使用しない方が効率的であると判断した場合(おそらくクエリの書き換えが原因)、使用しません。オプティマイザのヒントはまさにそれです。つまり、好きなインデックスをOracleに伝えるためのヒントです。 使用する。あなたはそれらを提案として考えることができます。ただし、オプティマイザがインデックスを使用しない方がよいと判断した場合(たとえば、クエリの書き換えの結果として)、使用されません。

    次のリンクを参照してください: http://download。 oracle.com/docs/cd/B19306_01/server.102/b14211/hintsref.htm 「これらのヒントの1つを指定すると、オプティマイザーは、インデックスまたはクラスターの存在とSQLステートメントの構文構造に基づいてアクセスパスが使用可能な場合にのみ、指定されたアクセスパスを選択します。ヒントが使用できないアクセスパスを指定している場合、その後、オプティマイザはそれを無視します。」

    count(*)操作を実行しているため、オプティマイザーは、インデックスを使用するよりも、テーブル全体をスキャンしてハッシュする方が効率的であると判断しました。

    ヒントに関するもう1つの便利なリンクは次のとおりです。http://www.dba-oracle.com/t_hint_ignored。 htm



    1. SQL Server Management Studioで実際のCSV形式でエクスポート出力を取得するにはどうすればよいですか?

    2. SQLAlchemyで生のSQLを実行する方法

    3. SQL Server実行プラン—それは何であり、パフォーマンスの問題にどのように役立ちますか?

    4. 教義における多対多の関係