3
私は比較的単純クエリがあります。クエリプランがインデックススキャンを生成するのはなぜですか?
SELECT o.id
FROM dbo.table1 o
LEFT JOIN dbo.table2 n (NOLOCK)
ON o.first = n.second and n.first = @Var1
WHERE
(o.fourth in (@Var4, @Var5) or o.fifth = @Var6) AND
(o.first = @Var1 or n.first = @Var1) AND
(
o.second = @Var2 OR
o.second like (@Var2 + '[^a-zA-Z]%') OR
o.third like (@Var3 + '[^a-zA-Z]%')
)
をしかし、私はクエリプランをチェックアウトする時はいつでも、私はインデックススキャンを行っています。
私は非クラスタ化インデックスが(TABLE1に)です:
First ASC,
Fourth ASC,
Fifth ASC,
Second ASC,
Third ASC
Include: id
なぜスキャン?私のインデックスはそれをカバーしていないのですか?私もtable2の正しいインデックスを持っているので、私はそこに心配していません。あなたは表1からFirst
列を使用している
意味があります。その場合、具体的な出発点はありません。クエリを書き直すほうがよいでしょうか? – user2124871
@ user2124871 - すべてがとても抽象的であることを伝えるのは難しいです。クエリが*論理的に正しい*の場合、論理的にも正しい再書き込みは、まったく同じクエリプランを持つことになります。 –
私はこの問題を回避しようとしましたが、あなたが述べたように、私は同じクエリプランを持っています。次の解決策は、これを別のクエリに分解し、結果に参加させることです。あなたのご意見ありがとうございます - それを感謝します。 – user2124871