2016-01-15 4 views
8

私はInnoDBを使用しています。テーブルから10レコードを取得するためにクエリを実行する必要があります。ORDER BYなしでLIMITを使用するのは安全ですか

ORDER BYを使用しないでLIMITを使用しても安全ですか?それは速くなるでしょうか?

+1

ご注文無しでご利用いただけます。どのタイプのあなたが欲しいのですか? –

答えて

2

あなたは、あなたはORDER BYを使用していない場合あなたのレコードをソートしていないので、間違いなくあなたのデータをより速く検索できます。したがって、単にLIMITを使用すると、ORDER BYで取得したデータと比較してより高速になります。しかし、その場合、データが順不同であることに注意してください。

LIMITのみを使用し、ORDER BY句を使用しないクエリでは潜在的な害はないので、安全性に関しては、あなたが考えている安全性についてはわかりません。

また、記事を見ることができます:ORDER BY … LIMIT Performance Optimization

1

はい、あなたはそうすることができます。 order byにはソートが必要です。これは、結果を得るためにデータベースがより多くの作業をしなければならないことを意味します。最も一般的にあなたが(など、ある種の発言最新、最高ランクを)取得され 10のレコード上のいくつかの順序の制約を入れたいので、limitorder byで使用されて

1

それはあなたが一貫性のある結果(meanning、限り、テーブルの内容は変更されませんと毎回同じ結果を得る)場合、またはしたい場合などsafe-考えるものによって異なり特定の結果(最大、最新、最長、何でも)が必要な場合 - これには注文が必要です。あなたが安全であれば、クエリがうまくいかず、Xの結果が気になることはありません。限界を使うことは大丈夫です(これは実際にはmysql workbenchのような多くのSQLツールによって自動的に行われます)。速度 - の面では

は、2つの理由でオーダーすることなく、無駄になります。

  1. 順序は時間がかかります。
  2. 制限を使用すると、最初のX結果が見つかるたびにサーバーを停止できます。 limit 10のクエリは、大きなテーブルではlimit 100000より速く実行されることがわかります。あなたが注文を使用するとき、サーバーはすべての結果を通過しなければならないので、真ん中で停止することはできません。

そうです、順序なしの制限を使用すると、それより早く

0

3つの答えは、これまでのところ良いですようになります。しかし、それは完全に正しいわけではありません。他の回答に反し

時々ORDER BYより速くそれをしないます除外します。オプティマイザは、この順序で行を生成することがあります。例:

  • GROUP BY通常は結果を注文します。したがって、ORDER BYGROUP BYと一致する場合、余分な努力はありません。
  • ORDER BY the_primary_keyがフェッチの順序と一致する可能性があります。これは、WHERE句のないInnoDBの場合とほとんど同じです。

"安全"は計算されません。