アプリ版:「スタンプのみでお礼する」機能のリリースについて

SQLServerのselect文でデータ数1万くらいのDBから
top n と
order by つきで取得したときに、
10秒以上かかってしまいます。
top n だけや
order byだけであれば、そんなにかかりませんが、
同時に扱う場合、なぜこんなに時間がかかってしまうのでしょうか?

A 回答 (2件)

クエリプランを確認してみましょう。


TOP句を切って先頭何行かを取るだけでも時間がかかるのは、全部並べ替えてみなければ対象が分からないからです。

従って、
1) TOP句のみ   IndexScan/TableScan+Top
2) ORDER句のみ  IndexScan/TableScan+Sort
3) TOP句+ORDER句 IndexScan/TableScan+Top N Sort
となり、3は2と同じくらいになるはずです。
(クラスタインデックスでORDER句を切ったときは例外で、ソート不要のためその場合は1と同じになります)

したがって、質問者さんの環境で2と3はどうプランされるかを確認されるのがいいと思います。
なお、TOP 100 PERCENTはSQL Server 2005以降では無視されますので、1と同じ結果になります。
    • good
    • 2

データベースの設計が分かりませんが


> top n だけや
> order byだけであれば、そんなにかかりませんが、
であるならば、

SELECT TOP 3500 *
FROM (SELECT TOP 100 PERCENT Field1, Field2
FROM データベース名 ORDER BY Field1) q

の様にしたら速くなります。
    • good
    • 5

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す