1つまたは2つの結果を返す必要があることがわかっているクエリがたくさんあります。それらを明示的に制限する必要がありますか、それともDBに仕事を任せる必要がありますか?つまり、キーの一意の組み合わせを使用している場合、または同じ結果が何度も発生する可能性がある場合は、DISTINCTを使用する代わりにLIMIT1を実行するだけです。
4 に答える
1行または2行を返す必要があることがわかっている場合、追加LIMIT
すると、1行または2行を超える場合に問題が非表示になります。これは、次のようにコードをラップして例外を飲み込むのと同じです。
try{
//some code
}
catch{
//do nothing
}
したがって、この場合は使用しませんLIMIT
。代わりに、これが発生すると(またはログに記録するなど)、アプリケーション層でエラーをスローします。
クエリがその数を超える結果を返すことがエラーであり、これがアプリケーションにとって重要であることがわかっている場合、予想よりも多くの結果がある場合は例外をスローする必要があります。
これに関連して、無制限のクエリがあると、アプリケーションとSQLデータベースのパフォーマンスに悪影響を与える可能性があります。1つまたは2つの値しかないと予想される結果セットが数千になると、問題が発生する可能性があります。
私LIMIT
は2つの理由で使用します:
- より大きなセット(上位5ユーザー、Xユーザーから)から既知の量の行を返すには
- 予想よりも多くのレコードを取得しないよう
DELETE
にするために:)そして、その場合、LIMITを予想よりも1つ大きく設定したので、@RedFilterが説明するエラーをマスクしません。
一般的に、結果セットが小さいほど実行速度が速くなるため、アクセスされる行数を制限する必要があります。
SQL Serverの*クエリパフォーマンスチューニングからの抜粋:
クエリは、比較的少数の行を要求する必要があります。たとえば、Web上の検索エンジンは、検索条件が何千もの一致する記事を返す場合でも、ほとんどの場合、一度に限られた数の記事を返します。クエリが多数の行を要求する場合、ルックアップのオーバーヘッドコストが増加するため、インデックスは適切ではなくなります。
または、選択性の高い基準を作成することもできます。
選択性の高いフィルター基準は、テーブルからの行数を小さな結果セットに制限し、オプティマイザーがクエリのコストを低く抑えるのに役立ちます。
*質問がMySQLとしてタグ付けされていることを知っています