現在のインデックスは次のとおりです。SQL Serverフィルタリングインデックスのパフォーマンス
CREATE UNIQUE NONCLUSTERED INDEX [CDPAYAPP_INDEX03] ON [dbo].[CDPAYAPP]
(
[CLSVC_ID] ASC,
[ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90)
残念ながら、私たちのクライアントのいくつかをCLSVC_IDの値はカップル万人の行のうち行の100K以上のためにゼロにすることができます。このカーディナリティーは、オプティマイザが索引を最適ではないと見なすことがあり、その結果表のスキャンが行われるように見えます。 1日に複数回統計情報を更新すると、必ずしも役立つことはありません。
私はFILTERING INDEX句を適用しようとしました。
create UNIQUE NONCLUSTERED index CDPAYAPP_INDEX3A ON CDPAYAPP (CLSVC_ID, ID)
WHERE CLSVC_ID > 0;
しかし、私は2つのインデックス列の外に任意の列を要求した場合、それは元の索引ではないフィルターのインデックスを使用していることに気づきました。インデックスの列のみを選択すると、フィルタされたインデックスが使用されます。
なぜですか?
であることを知っているだろう、あなたは私たちにそのクエリプランを最適化するためのクエリを与えることができますか? https://www.brentozar.com/pastetheplan/ – Hybris95