0

SQL Server Management Studio 2012 で、次のクエリを実行します。

SELECT * FROM Contacts

このクエリは、約 44 秒で正常に実行されます。

SELECT * FROM Contacts WHERE FirsttName = 'David"

このクエリは、約 0 秒で正常に実行されます。したがって、私の質問は、これらのクエリ時間が大きく異なる原因は何なのかということだと思います。私の素朴な観点からは、どちらの場合も、FirstName が「David」と等しいかどうかを確認するためにすべてのテーブル行を調査する必要があり、条件がそれほど大きな影響を与えるべきではないと思います。実際には、追加のチェックがあるため、クエリにはもう少し時間がかかると思いました。

別の例は次のとおりです。

SELECT * FROM Jobs

約 25 秒で正常に実行されます。

SELECT * FROM Jobs WHERE JobName = "Sales"

約 0 秒で正常に実行されます。

これは生命を脅かす/ブロッキングではありません/なんてこった、この問題を解決できないのはなぜですか. 不思議に思うことばかり。

4

2 に答える 2

2

これは、where ステートメントが、選択したくない行を除外するためです。つまり、10000 行の 1 つだけに FirstName "David" が含まれている場合、10000 行全体ではなく、その 1 行のみが取り出されます。これは理にかなっていますか?

さらに、テーブルはインデックスと統計を使用して探しているデータをすばやく検索するため、すべての行を調べるよりも早くそこに到達する可能性が高くなります。

于 2013-06-21T20:29:27.643 に答える