2011-11-05 4 views
-4

私は、SQLクエリSQLクエリの最適化:SELECT * FROM Personは実際にSELECT * FROMよりもはるかに遅い人WHERE City = 'Sandnes'?

SELECT * FROM Persons WHERE City='Sandnes' 

は、クエリから

SELECT * FROM Persons 

されているどのくらい速いという疑問がありますか?

ネット上のさまざまな情報源から、よりフィルタリングされたクエリでパフォーマンスが向上していることがコンセンサスですが、特定のものになることは決してありません。

私はデータベースがどれほど大きいかによって異なりますので、3つのデータベースがあります.1000レコードしかなく、1レコードは1Mレコード、3レコードは10Mレコードです。レコードはわずか数バイトであるため、これらのデータはすべてサーバーのRAMに収まると仮定します。

スピードの差はどれくらい大きいと思いますか?野球場の推測でさえ助けになります。

私はMicrosoft SQL Serverを使用していますが、それは問題ではありません。

+4

あなた自身を測定すべきもののように見えます。 – Oded

+0

答えを知っていたら、私はコミュニティに尋ねません。あなたはそれを測定したのですか、それとも信仰によってそれを受け入れるのですか? – user1019776

+0

アドレステーブルで100万行の煙のテストを行った。単純な 'SELECT *'は21'350読み込みと13'695 ms実行時間を要します。 'SELECT * WHERE City = .... 'は、1'690読み込みと169ms実行時間を与えます。 –

答えて

2

私の好きな答え:「It All Depends」! 考えてみましょう:都市のインデックスがあり、クエリオプティマイザがインデックスを使用しているため、すべての列(*)を要求しているため、インデックスからテーブルへの一連のルックアップが終了します。インデックスがあまり選択的でない場合(たとえば、ほとんどのレコードが特定の「都市」にある場合)、インデックスが選択的である場合(選択された都市では小さい数字など)よりもはるかに遅く、テーブル全体よりも遅くなりますスキャン。したがって、統計が何らかの理由で正確でない場合、データベースは、テーブル全体よりもフィルタリングされたレコードセットを返すのに時間がかかる可能性があります。 質問に答える唯一の方法は、データ、ソフトウェア、およびハードウェアを使用してベンチマークすることです。

+0

非常に興味深い主ピーター - これが私がこの質問をする理由です。私はこれをREADのために真実と考えていたでしょうか(私が読んでいるCRUDの操作では、索引付けが遅くなる可能性はありますが、読み込みは遅くなります)。ところで、これは実際の問題から来たものですが、現在、WHEREに加えて特定の列に「BETWEEN」節を追加することが提案されています。ますます条件を追加したら?また、このデータの場合、CITYフィールドは同質ではなく広がっているように見えるので、検索のスピードアップに役立ちます。 – user1019776

関連する問題