• ベストアンサー

SQLServerのselect文でデータ数1万くらいのDBから

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

質問者が選んだベストアンサー

  • ベストアンサー
  • jamshid6
  • ベストアンサー率88% (591/669)
回答No.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)

回答No.1

データベースの設計が分かりませんが > top n だけや > order byだけであれば、そんなにかかりませんが、 であるならば、 SELECT TOP 3500 * FROM (SELECT TOP 100 PERCENT Field1, Field2 FROM データベース名 ORDER BY Field1) q の様にしたら速くなります。

関連するQ&A