3

選択されていない計算値で順序付けするクエリがあるとします。次に例を示します。

select * from table
order by col1 * col2 - col3

ほとんどの言語での一般的な並べ替え操作では、特定のレコードが潜在的に他の多くのレコードと比較されるため、並べ替え中に並べ替え値が複数回使用されるのが一般的です。mysqlにそのような実装がある可能性があります。

mysqlがそのような値を行ごとに1計算し、ソートの完了中に一時的に保存する場合、または比較が行われるたびに値が再計算される場合(1〜n回)、誰もが明確に言うことができますか?

私はこのmysqlにタグを付けましたが、他の人気のあるデータベースに関するコメント/回答を歓迎します

4

2 に答える 2

1

答えは... mysqlは行ごとに 1回計算を実行します。

信頼できる回答がないため、sqlfiddle で決定的なテストを実行not deterministicしました。これは、呼び出されたときに別のテーブルにも記録する関数 (比較するたびに呼び出す必要があります)の結果によって並べ替えます。呼び出し回数=行数であることがわかります。

于 2012-08-14T17:12:38.473 に答える
0

MySQLクエリブラウザを使用して、複数の列の計算でソートするクエリを説明しましたが、ファイルソートを使用しているとのことでした...したがって、一時インデックスを使用しているように見えます(1回計算)。

テストしたい特定の例がある場合は、同じことを確認できます。

以下は、order by のしくみを詳しく説明している開発者のブログの 1 つへのリンクです。

http://s.petrunia.net/blog/?p=24

于 2012-08-13T12:55:47.670 に答える