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倍近く違うので驚きでした。
これでマイナーバージョンアップなのだからビックリ。