0

これは簡単な質問です:)

どちらが速いか (そして、どれくらい速いか)

SELECT * FROM Table WHERE Id<100000000

また

SELECT TOP 100000000 * FROM Table ORDER BY Id

Id は 1 から始まり、1 ずつ増加するため、クエリは同じ結果を返すはずです。私の例では 1 億のレコードを選択しましたが、これは「速度の違いが顕著になる可能性がある非常に多数のレコード」を意味します。

問題がある場合は、Microsoft SQL Server を使用しています。

4

2 に答える 2

1

一般に、最初の方が高速になります。最初のクエリはテーブルを 1 回スキャンし、比較を行い、見つかった行を返します。

id2 番目のクエリでは、行を返す前に列を並べ替える必要があります。並べ替えは、テーブルを読み取るだけよりもコストがかかるため、時間がかかります。

インデックスがある場合idは、理由が変わります。最初のバージョンでは、インデックスが使用される場合と使用されない場合があります。存在する場合は、インデックスをスキャンしてから、レコードごとにテーブルのデータをフェッチします。

2 番目のクエリは、ほぼ確実に、前の段落で説明したパフォーマンスを備えたインデックスを使用します。インデックスを使用すると、2 つが同等になる場合があります。

インデックスの使用がテーブル スキャンよりも高速かどうかは、言及していない要因 (テーブルの大きさとメモリの量) によって異なります。

于 2013-03-24T20:04:42.597 に答える
0

以下は、 100,000行を選択するための推定クエリ プランです。

トップQ

最初のプラン (49%) は ID を使用し、2 番目のプラン (51%) はtop句を使用します。テーブルの構造はまったく同じではありませんが、おわかりいただけると思います。

于 2013-03-24T20:08:50.950 に答える