- ベストアンサー
SQLServerのselect文でデータ数1万くらいのDBから
SQLServerのselect文でデータ数1万くらいのDBから top n と order by つきで取得したときに、 10秒以上かかってしまいます。 top n だけや order byだけであれば、そんなにかかりませんが、 同時に扱う場合、なぜこんなに時間がかかってしまうのでしょうか?
- みんなの回答 (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と同じ結果になります。
その他の回答 (1)
- chibita_papa
- ベストアンサー率60% (127/209)
回答No.1
データベースの設計が分かりませんが > top n だけや > order byだけであれば、そんなにかかりませんが、 であるならば、 SELECT TOP 3500 * FROM (SELECT TOP 100 PERCENT Field1, Field2 FROM データベース名 ORDER BY Field1) q の様にしたら速くなります。