2017-06-09 1 views
1
I がOracleデータベースでフル・テーブル・スキャンを検出しました。私は explainデータベース内のコマンドをexcuteすることはできません、単に置く、私は許可を持っていません。 私は次の質問を理解しようとしています。

は、最初に変数UPPER()を使用するときにインデックスを使用しますか?

私はこのクエリではtable

NAMEにインデックスを持っている場合:

select OID 
from table 
where NAME=UPPER(v1) 
    and TYPE=v2 
    and PID=v3 
    and OID<>v4 
    and PID =v5` 

name上のOracleの使用率がOIDを選択します(v1は変数ですか)?

私はいくつかの資料を読みましたが、それはどこの条件でNAMEインデックスが使用されないという関数で言います。しかし、upper()は特別な関数なので、前に見たような素材については静かではありません。私はcreate index INDEX_NAME on table(upper(NAME));

を使用して索引を作成する場合

クエリます:ここ

とは@mathguyの答えの後に2番目の質問です

select OID,PID 
from table 
where PID=v1 
    and NAME=UPPER(v2) 

は、インデックスINDEX_NAMEを使うのか?

上記の質問でインデックスが使用され、クエリが効率的でないため、実行に時間がかかります。

+3

1を説明しlinkですクエリプランは表示されませんか? 2.フルスキャンが必ずしも悪いとは限りません! (例えばテーブルが大きければ) –

+2

意味があれば、はいOracleは 'name'にインデックスを使用します –

+0

あなたが許可に関して言ったことは意味をなさない。あなたは開発者ですか?そうでない場合、なぜインデックスやFTSを気にかけますか?だから私はあなたが開発者だと仮定します。もしそうならば、どのような悪魔(厳しい言い回しには申し訳ありません)があなたを開発者に雇うでしょうが、あなたが説明計画を実行できないようにして、あなたの仕事を正しく行えないようにします。あなたのマネージャーに行き、彼らがそれを変更するかどうかを確認してください。 – mathguy

答えて

2

インデックスがnameの場合、オプティマイザは指定した例でインデックスを使用することがあります(MAY)。それを使用しないことを選択するかもしれません(たとえ、とにかく比較的大きな行が戻ってくると推定される場合)。たとえば、0.1%の行しか返されない場合は、必ずインデックスが使用されます。 (まだそれが起こらない場合は、統計情報が最新であることを確認してください)nameupper()にラップした場合、インデックスの使用を妨げるのは何ですか?あなたがv1またはupper(v1)かさえもはるかに複雑な式を持っているかどうか - - 何が右側に起こる限りnameも右側にその複雑な式に表示されていないとして無関係です。

+0

[this](https://docs.oracle.com/cd/E11882_01/server.112/e40540/indexiot.htm#CNCPT1161)によると、UPPER(NAME)にインデックスを作成し、テーブルから何かを選択するとname = UPPER(NAME)、UPPER(NAME)のインデックスが使用されます。 – EvanL00

+0

お客様は自宅工具を使用してテーブルスキャンを全面的に開始すると言います。 – EvanL00

+0

完全なSQL Statemet Trigged Full Table Scanを使用して質問を更新しています。 – EvanL00

0

おそらく、これが役立ちます...オラクルで

、あなたが機能UPPER(NAME)に索引を作成したので、もしあなたが名前だけでなく、機能上のインデックス(機能指数)を作成することができ、 (それはまだ他の要因に依存していない選択かもしれませんが。)Oracleは、インデックスを使用する可能性が高いかもしれ

ここではどのように「あなたができるならば、それは完全なスキャンを知っているん機能指標に

+0

ありがとうございます。 – EvanL00

+0

OPのシナリオでFBIが有用な理由は、列の値ではなく変数だけが変換されるのですか? –

+0

@AlexPoole私はオラクルが大文字と小文字を区別するので、UPPER(変数)を列と比較してから、列をUpperとして索引付けする必要があると考えていました。 – markg

関連する問題