クエリプランに実行コストの15%が1つのテーブルであるとの問題があります。ただし、この表は非常に小さい(9行のみ)。小さなテーブルのクエリプランに非常に高いコストがあります
明らかに、クエリに含まれる最小のテーブルのコストが最も高い場合は問題があります。
私の推測では、クエリは結果をキャッシュするのではなく、同じテーブルを何度も繰り返してループしているようです。
私はこれについて何ができますか?
申し訳ありませんが、私は(非常に複雑である)正確なコードを貼り付けますが、ここでは似たようであることはできません。
SELECT Foo.Id
FROM Foo
-- Various other joins have been removed for the example
LEFT OUTER JOIN SmallTable as st_1 ON st_1.Id = Foo.SmallTableId1
LEFT OUTER JOIN SmallTable as st_2 ON st_2.Id = Foo.SmallTableId2
WHERE (
-- various where clauses removed for the example
)
AND (st_1.Id is null OR st_1.Code = 7)
AND (st_2.Id is null OR st_2.Code = 4)
実行計画を確認できますか?テーブルスプールが見えますか?見上げる?そのテーブルのインデックスはどうですか? –
私に推測を聞かせてください。テーブルの統計が更新されないかもしれません。オプティマイザ/クエリプランは、クエリの適切なクエリプランではない可能性があります。 –