0

そのため、最近、巨大なテーブルに対してクエリを実行するときは、次のtop 10 *ように表記法を使用します。

select  top 10 * from BI_Sessions (nolock)
where SessionSID like 'b6d%'
and CreateDate between '03-15-2012' AND '05-18-2012'

もっと速く走らせようと思ったのですが、そうでもないようで、これは4分かかりました(それでいいですか)?

とにかくすべてのデータをプルした後に機能が発生するかどうかに興味があると思いtopます(これは非効率的だと思われます)。

ありがとう

4

2 に答える 2

2

「上位 0」を除いて、クエリに完全に依存します。"Top 0" ははるかに速く戻ります。

あなたの場合、クエリは巨大なテーブルの行を調べて、WHERE 句に一致する行を見つける必要があります。行が見つからない場合、返される行数は役に立ちません。行がテーブル スキャンの最後にある場合、返される行数は役に立ちません。

「トップ」がパフォーマンスに影響を与える可能性がある、より複雑なクエリの特定のケースがあります。全体の最適化と返される最初の行の最適化には違いがあります。SQL Server のオプティマイザがこの違いを認識しているかどうかはわかりません。

于 2012-06-29T15:31:19.480 に答える
1

まあ、それは依存します。BI_sessions とその大規模なデータベースにカバーするインデックスがない場合、答えはおそらくです。適切なカバー インデックスは、CreateDate、SessionSIS、および実際に返す必要があるすべての列のようなものです。コーブ インデックスがある場合、SQL はテーブルを読み取ることさえせず、必要なすべてのデータをカバリング インデックスから取得します。おそらく、実際に返す必要がある列を指定した場合、10 行が一瞬で返されるはずです。より有用な情報 http://www.mssqltips.com/sqlservertip/1078/improve-sql-server-performance-with-covering-index-enhancements/ およびもう少し技術的 な情報については、 http://www.simple-talk. com/sql/learn-sql-server/using-covering-indexes-to-improve-query-performance/http://www.sqlserverinternals.com/ および http://www.insidesqlserver.com/thebooks.html

于 2012-06-29T15:32:50.743 に答える