SQL Server 2005 データベースの順序付けパフォーマンスに問題があります。次のクエリがあるとします。
select
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
order by
orderIndex
このクエリは 7 行を返し、実行に約 23 秒かかります。このクエリの実行計画は次のとおりです (まだ画像を投稿できません)。
select (コスト: 0%) -> Sort (コスト: 11%) -> Clustered Index Scan (コスト: 89%)
「order by」句を削除すると、予想どおり、クエリは最大 4 ミリ秒で完了します。
要求された行を取得する前に SQL Server が並べ替えを行うのはなぜですか? 私には意味がありません。最初に 7 行を取得して、それらだけを並べ替えてみませんか? データベース構成など、何か不足していますか? それとも、これは予期された動作ですか?
以下のような内部選択を使用して、エンジンに最初に行を取得させてから順序付けさせることができます。これにより、行が 6 ミリ秒以内に返されますが、EF を使用しているため、これは良い解決策ではありません。私たち (メモリ内の結果を並べ替えることができますが、並べ替えを使用して SQL コードを生成する一部のエンティティに対して LoadWith オプションを使用しており、そのコードも同じ「順序付け」の問題に悩まされています)。
select *
from(
select
id, versionId, orderIndex
from Forms_Page
where
versionId = 'AFCF4921-31B4-44C1-B3A7-913910F7600E'
) T
order by
T.orderIndex
私はいくつかのインデックス作成がソートされた列であるとテストしましたが、これは固定されたものですが、列が既にソートされているためです。不格好な解決策のように思えます...