2018年2月6日火曜日

EC-CUBE 2系のDB速度問題

今更すぎますが、まだ3系よりも2系の方がメジャーなようなので、2系ネタです。

EC-CUBE2系のDBは、postgresqlとmysqlの2つから選べますが、postgresqlが圧倒的に早いです。
これを勘違いして、mysqlよりpostgresqlが優秀と信じている人が居ます。
EC-CUBE上での実行速度比較をしたりしてね。

EC-CUBE2系でpostgresqlが速いのはあたりまえです。
postgresqlでのみ高速に動くようにチューニングされています。
postgresql専用のクエリを使っています。

mysqlにした場合、簡易的なクエリ変換を行って実行しています。
遅くてあたりまえです。一切のチューニングが行われていません。

致命的なのは、postgresqlはビューを使って高速化しているのに対し、mysqlでは使っていません。
mysqlでもビューを使う事で、同じ速度になります。


そもそも、この程度の物にビューに使わないと重くなるってこと自体がおかしいです。
クエリ内容を見直すことで、数百倍から数万倍以上の高速化が可能です。※実話です。
ほぼすべてのクエリに問題があるので、どことは言えません。言うならば、全ての箇所です。
重いと思ったらクエリを最適化してください。天と地の差が出ます。

・意味のない処理をしていないか。※仕様変更等での消し忘れが意外とある
・インデックスを適切に使っているか。 ※インデックスがまともに無い・・・
・無駄にフルスキャンする状態になってないか

ビューと使うとカスタマイズが面倒な事になるので、避けた方が良いです。