1

次の2つのクエリの間にパフォーマンスの違いはありますか?

SELECT * FROM users AS u LEFT JOIN parents AS p ON u.id=p.user_id

SELECT * FROM users u LEFT JOIN parents p ON u.id=p.user_id

(2番目のものにはありませんAS

4

3 に答える 3

2

すべての場合と同様に、測定することは知ることです。本当に知りたい場合は、プロファイラーを実行して測定してください。そうでなければ、私たちからそれを取ってください:それはあなたがこれまでにそれについて入れた考えの価値さえありません。

a)MySQLの欠陥と見なされるべき(かなりの量の)違いがある場合、b)クエリの実行部分ではなく、クエリの解析部分で問題が発生するため、通常は解析ではなく実行が行われるため、無視できます。とにかく、合計「クエリ時間」の99.99999%を占めます(それ以上ではないにしても)。

測定可能な違いがある場合、それ非常に非常に小さいはずです。したがって、a)ユーザーは通常、ナノ秒単位のスピードアップに気付かないため、違いについて気にする価値はありません。タイトなループで何千ものクエリ。

MySQLの貢献者が混乱しなかった場合、ASキーワードはオプションであり、読みやすくするために存在するため、まったく違いはありません。確実に知る唯一の方法は、プロファイルを作成することです。ソフトウェアに奇妙なバグや動作が現れるのはこれが初めてではありません。しかし、キーワードがまったく違いをもたらさないと仮定するのは(非常に)安全です。ASなぜなら、それはあなたの前にいる何百万ものMySQLユーザーのいずれかによってずっと前に「発見」されたからです(またはそれらのどれも気にしませんでした) 、あなたは決して知りませんプー)。この「質問」のプロファイリングに時間を費やすと、私見では時間の無駄になります。

最適化クラブのルールを読んでください。

実際にパフォーマンスの問題がある場合にのみ、最適化する場所を探し始めます。そして、あなたは「ぶら下がっている果物」またはかなりの負荷(それがI / O、CPU、ネットワークなど)を占めるものだけを最適化します。パフォーマンスのためにキーワードを削除するクエリを最適化ASすることは、(バグ/問題を除いて)あなたの時間の投資を決して返すことのないマイクロ最適化です。「思考実験」として、あなたの質問は、推測や他の人の意見などではなく、プロファイリングを使用してハードデータを確立することで答えることができます(そして答えるべきです)。


クエリが実行されるたびに、キーワードの有無にかかわら、またはキーワードが異なる場所で実行される可能性があるクエリキャッシュのようなものを除外しました。これにより、クエリ実行計画が(不必要に)再作成されたり、クエリキャッシュは再利用できないなどですが、ここでは実際にエッジケースについて話しているので、ここでも、測定することは知ることです。ASAS

于 2013-03-27T08:59:46.707 に答える
1

本当に同じです。

ASキーワードはオプションです。OUTERとのキーワードのようLEFT JOINLEFT OUTER JOIN

于 2013-03-27T08:55:49.793 に答える
0

select_exprを識別子でエイリアスする場合、 ASキーワードはオプションです。ただし、ASはオプションであるため。MySQLは2番目をエイリアス名として解釈します。このため、列エイリアスを指定するときは、ASを明示的に使用する習慣を身に付けることをお勧めします。

作成者: http: //dev.mysql.com/doc/refman/5.0/en/select.html#idp56626352

于 2013-03-27T08:56:56.457 に答える