読者です 読者をやめる 読者になる 読者になる

MySQLの join を利用するときに on と where ではどちらが速いのか

MySQL

ちょっと気になったので調べてみた。

stackoverflow だと以下が引っかかった。
http://stackoverflow.com/questions/5273942/mysql-inner-join-vs-where
http://stackoverflow.com/questions/44917/explicit-vs-implicit-sql-joins

どっちでも変わらないらしい。

実行計画を見てみる。

こっちが on の場合。

+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                           |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+
|    1 | SIMPLE      | a1    | ALL  | NULL          | NULL | NULL    | NULL |    6 |                                                 |
|    1 | SIMPLE      | a2    | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where; Using join buffer (flat, BNL join) |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+


こっちが where の場合。

+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+
| id   | select_type | table | type | possible_keys | key  | key_len | ref  | rows | Extra                                           |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+
|    1 | SIMPLE      | a1    | ALL  | NULL          | NULL | NULL    | NULL |    6 |                                                 |
|    1 | SIMPLE      | a2    | ALL  | NULL          | NULL | NULL    | NULL |    6 | Using where; Using join buffer (flat, BNL join) |
+------+-------------+-------+------+---------------+------+---------+------+------+-------------------------------------------------+

まあ、変わらないよね・・・。

個人的に on の方が好きなのでonにしようと思う。