5

数学を使用して SELECT するのは非常に効率的であり、WHERE 句で数学を使用するのはあまり効率的ではないと何度か言われました。これらの感情は正しいですか?そして、これは ORDER BY 句にどのように適用されるのでしょうか?

ありがとう!!

例:

SELECT a.* FROM a ORDER BY (a.field_1*a.field_2)
4

3 に答える 3

5

結果が sort_buffer_size より大きい場合、クエリはディスク上の一時ファイルを使用してテーブル全体をソートする必要があります。

おそらく、field1*field2 の値を保持する列をテーブルに追加したいと思うでしょう。もちろん、これはデータをわずかに非正規化しますが、フィールドにインデックスを作成できます。

新しいフィールドにインデックスがある場合、MySQL インデックスは b*tree 構造であり、b*tree 構造は事前にソートされた順序で格納されるため、MySQL はインデックスを使用して事前にソートされたデータを読み取ることができます。これにより、並べ替えのために余分なディスク IO または CPU アクティビティが発生することはなく、テーブルを 1 回だけスキャンします。

于 2012-08-08T06:01:37.103 に答える