MySQL5.5と5.6のサブクエリ実行速度が1000倍以上違った件
メンバーの作った機能をテストしようとしたときのこと。
自分の環境で全く動かない画面があって、原因を探ると唯一の違いがMySQLのバージョンでした。
自分のMacに入っているMySQLが5.5系でメンバーのPCに入っているのが5.6でした。
MySQLは5.5から5.6になってサブクエリなどの性能が上がったとは聞いていましたが、
せいぜい1.5倍や2倍程度だと思っていました。
が、しかし!
実はMySQL5.5と5.6には1000倍以上の速度差があることがわかりました。
今回実行したのは以下のようなサブクエリ。
SELECT
hoges.*
FROM
hoges
WHERE
hoges.id IN (
SELECT
hoge_id
FROM
hugas
WHERE
(hugas.deleted_at IS NULL)
AND (hoge_id is not null)
)
AND hoges.hoge_state = 2
AND (hoges.deleted_at IS NULL);
MySQL5.5での結果(5回計測)
mysql> (14.75 sec)
mysql> (14.79 sec)
mysql> (14.81 sec)
mysql> (14.75 sec)
mysql> (14.89 sec)
MySQL5.6での結果(5回計測)
mysql> (0.01 sec)
mysql> (0.00 sec)
mysql> (0.01 sec)
mysql> (0.01 sec)
mysql> (0.00 sec)
MySQL5.5 平均: 14.80
MySQL5.6 平均: 0.01
単純に考えると1,500倍近く違うので驚きでした。
これでマイナーバージョンアップなのだからビックリ。