実行に1秒しかかからない次のSQLクエリがあります。
select a.date, b.rate, c.type, a.value from
a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx'
しかし、レートが 0 より大きい結果を取得するには、結果セットが必要です。したがって、クエリを次のように変更すると、実行に 7 分かかります。
select a.date, b.rate, c.type, a.value from
a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx' and b.rate>0
これにより、クエリ時間が 1 秒から 7 分に増加するのはなぜですか? b テーブルは巨大なので、CTE を使用しようとしましたが、パフォーマンスも向上しませんでした。CTE を使用すると、フィルタリングする値のセットが小さくなるので、高速になるはずですが、それは役に立ちませんでした。
;with x as
(select a.date, b.rate, c.type, a.value from
a inner join b on a.id = b.aid
c inner join b.id = c.bid
where a.name = 'xxx')
select * from x where rate>0
クエリ以外のデータベースへのアクセス許可がないため、実行計画を含めることはできません。