回答:
最悪の場合、インデックス付けされていないフィールドを参照MIN()する場合、を使用するには、テーブルの完全な単一パスが必要です。使用SORTしてLIMIT、filesortが必要です。大きなテーブルに対して実行した場合、予想されるパフォーマンスに大きな違いが生じる可能性があります。無意味なデータポイントとして、MIN().36sしばらく時間がかかったSORTし、LIMIT私のdevのサーバー上で106000行のテーブルに対して.84sを取りました。
ただし、インデックス付きの列を見ている場合、違いはわかりにくいです(無意味なデータポイントはどちらの場合も0.00秒です)。ただし、explainの出力を見ると、MIN()インデックスから最小値(「選択されたテーブルを最適化して削除」と「NULL」行)を単純に抽出できるように見えますがSORT、LIMITそれでも、インデックスの順序付けられた走査を実行する必要があります(106,000行)。実際のパフォーマンスへの影響はおそらく無視できます。
それはMIN()進むべき道のように見えます-最悪の場合はより速く、最良の場合は区別がつかず、標準SQLであり、取得しようとしている値を最も明確に表現します。msonが述べたように、使用SORTしてLIMIT望ましいと思われる唯一のケースは、任意の列から上位または下位のN値を見つける一般的な操作を記述していて、特殊なケースの操作を記述する価値がない場合です。
SELECT MIN(`field`)
FROM `tbl`;
単にANSI互換だからです。TOPはSQL Serverに対するものなので、制限1はMySqlに固有です。
以下のようMSONとショーンMcSomethingが指摘されている、MINが好ましいです。
ORDER BY + LIMITが役立つもう1つの理由は、MIN列とは異なる列の値を取得する場合です。
例:
SELECT some_other_field, field
FROM tbl
ORDER BY field
LIMIT 1
答えはあなたがしていることに依存すると思います。
1回限りのクエリがあり、インテントが指定したとおりに単純である場合は、select min(field)が推奨されます。
ただし、これらのタイプの要件を、「上位n件の結果を取得」、「n番目-m番目の結果を取得」などに変更することは一般的です。
選択したデータベースにコミットするのはそれほどひどい考えではないと思います。dbの変更は軽く行うべきではなく、変更する必要があります。この移動を行うときに支払う価格です。
なぜ今あなた自身を制限するのか、あなたが後に感じるかもしれないし、感じないかもしれない痛みのために?
ANSIをできるだけ維持することは良いことだと思いますが、それは単なるガイドラインです...