UNIQUE
非インデックスを持つ列を使用するビューを作成しています。ただし、私の見解のコンテキスト内では、列には一意の値のみが含まれると確信しています (WHERE
句で課された条件のため)。
実際の問題は、誰かがその列に基づいてビューにクエリを実行したときに発生します (例: SELECT * FROM MY_VIEW WHERE COLUMN_WITH_NON_UNIQUE_INDEX = 'foo'
)。オプティマイザーは、多くの行を受け取ることになると確信しています (インデックスが技術的にないためUNIQUE
)。このため、オプティマイザーはビューの他の場所で他のインデックスを使用することを避け、全テーブル スキャンを優先します (クールではありません)。
インデックスのない列UNIQUE
に実際に一意の値が含まれることをオプティマイザに納得させる方法はありますか? 確かに、重複した値が列に忍び込む可能性はありますが、これはバグと見なされ、正当な一意のデータが損なわれることはありません。
残念ながら、私は問題のテーブルを制御できません (ため息)。