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

Oracle10g-最適化WHEREISNOT NULL

    オプティマイザは、全表スキャンの方が優れていると考えています。

    NULLが数個しかない場合 行、オプティマイザーは正しいです。

    インデックスへのアクセスが高速になると確信している場合(つまり、75%以上ある場合 col1 IS NULLの行 )、クエリをヒントします:

    SELECT  /*+ INDEX (t index_name_on_col1) */
            *
    FROM    mytable t
    WHERE   col1 IS NOT NULL
    

    なぜ75%

    INDEX SCANを使用しているため インデックスでカバーされていない値を取得することは、ROWIDでの非表示の結合を意味します 、約4の費用がかかります テーブルスキャンの倍。

    インデックス範囲に25%を超えるものが含まれている場合 行の場合、通常、テーブルスキャンの方が高速です。

    Tony Andrewsが述べたように 、クラスタリング係数はこの値を測定するためのより正確な方法ですが、25% それでも大まかな目安です。



    1. SQLiteで英数字以外の文字のみを含む行を返す

    2. C#で複数の要求に対して単一のSQL Server接続インスタンスを開いたままにする方法は?

    3. 古い認証を使用してMySQL4.1以降に接続できません

    4. PAASサービスモデルはどのように機能しますか?