3

リクエストにORDER BYがない場合、mysqlはどのように行を返しますか?

自然秩序を動かすものは何ですか?

明らかに多くの異なるクエリが存在する可能性がありますが、単純なものとしましょう

select column from table where date < NOW()

4

3 に答える 3

3

指定しない場合、自然な予測可能な順序はありません。

于 2013-10-03T20:25:13.890 に答える
1

これには十分注意してください。すべての SQL について、定義された暗黙の順序はありません。これを頼りにしないでください。特定の時点で特定の動作が見られたとしても、将来のリリースやインデックスの追加で変更される可能性があります。注文を期待して期待している場合は、明示的に指定してください。

問題は、結果の「自然な順序」が、DB エンジンが使用するアクセス プランによって完全または部分的に影響を受けることが多いことです。たとえば、FieldA でグループ化すると、結果が FieldA シーケンスで返される可能性が高くなります (保証されません)。非常に単純な選択を行うと、データベースに格納されている順序で結果が得られる可能性があります。これは、ID または主キーの順序である場合とそうでない場合があります。順序を指定しない場合は、結果の取得方法に基づいて、その時点で最も便利な処理を実行するオプションが DB エンジンに与えられます。そのため、実際には予測不可能になり、変化する可能性があります。

もっとうまく説明できればいいのですが、オブザーバーの視点からプロセスの本当のランダム性を伝えようとしています。

于 2013-10-03T20:28:32.127 に答える
0

クエリがインデックスを使用している場合、そのインデックスの順序が優先されます。Group by は順序付けを強制します。これが、group by と order を組み合わせるとパフォーマンスが低下する理由です。

あなたの場合、日付にインデックスがある場合、おそらくそれによって順序付けられますが、タイブレークをどのように処理するかはわかりません。詳細については、通常どおりクエリを説明してください。

もちろん、使用されるインデックスでの順序付けにも注意が必要です。インデックスが自動インクリメント フィールドにあり、データが事前に指定された ID で追加された場合、データが追加された順序が優先されることがあります。

于 2013-10-04T16:30:41.760 に答える