私はInnoDBを使用しています。テーブルから10レコードを取得するためにクエリを実行する必要があります。ORDER BYなしでLIMITを使用するのは安全ですか
ORDER BYを使用しないでLIMITを使用しても安全ですか?それは速くなるでしょうか?
私はInnoDBを使用しています。テーブルから10レコードを取得するためにクエリを実行する必要があります。ORDER BYなしでLIMITを使用するのは安全ですか
ORDER BYを使用しないでLIMITを使用しても安全ですか?それは速くなるでしょうか?
あなたは、あなたはORDER BYを使用していない場合あなたのレコードをソートしていないので、間違いなくあなたのデータをより速く検索できます。したがって、単にLIMITを使用すると、ORDER BYで取得したデータと比較してより高速になります。しかし、その場合、データが順不同であることに注意してください。
LIMITのみを使用し、ORDER BY句を使用しないクエリでは潜在的な害はないので、安全性に関しては、あなたが考えている安全性についてはわかりません。
また、記事を見ることができます:ORDER BY … LIMIT Performance Optimization
はい、あなたはそうすることができます。 order by
にはソートが必要です。これは、結果を得るためにデータベースがより多くの作業をしなければならないことを意味します。最も一般的にあなたが(など、ある種の発言最新、最高ランクを)取得され 10のレコード上のいくつかの順序の制約を入れたいので、limit
がorder by
で使用されて
それはあなたが一貫性のある結果(meanning、限り、テーブルの内容は変更されませんと毎回同じ結果を得る)場合、またはしたい場合などsafe-考えるものによって異なり特定の結果(最大、最新、最長、何でも)が必要な場合 - これには注文が必要です。あなたが安全であれば、クエリがうまくいかず、Xの結果が気になることはありません。限界を使うことは大丈夫です(これは実際にはmysql workbenchのような多くのSQLツールによって自動的に行われます)。速度 - の面では
は、2つの理由でオーダーすることなく、無駄になります。
limit 10
のクエリは、大きなテーブルではlimit 100000
より速く実行されることがわかります。あなたが注文を使用するとき、サーバーはすべての結果を通過しなければならないので、真ん中で停止することはできません。そうです、順序なしの制限を使用すると、それより早く
3つの答えは、これまでのところ良いですようになります。しかし、それは完全に正しいわけではありません。他の回答に反し
、 時々はORDER BY
が
より速くそれをしないます除外します。オプティマイザは、この順序で行を生成することがあります。例:
GROUP BY
通常は結果を注文します。したがって、ORDER BY
がGROUP BY
と一致する場合、余分な努力はありません。ORDER BY the_primary_key
がフェッチの順序と一致する可能性があります。これは、WHERE
句のないInnoDBの場合とほとんど同じです。"安全"は計算されません。
ご注文無しでご利用いただけます。どのタイプのあなたが欲しいのですか? –