EC-CUBEのカスタマイズ、ネットショップ制作メモ

主にEC-CUBEを利用したネットショップの制作、カスタマイズや独自機能の開発について

EC-CUBEをチューニング - MySQL:テーブル設計 - カラムの型

EC-CUBEの新バージョン、2.5.0の開発が開発合宿でかなり進んだ様です。僕も参加したかったのですが、諸事情により参加出来ませんでした。*1
EC-CUBE2.5.0では、MySQLへの対応がかなり改善されていて、パフォーマンスもかなり向上しているとの事です。
いやー、楽しみですね。


しかし、現在EC-CUBEECサイトを運営されている方は、MySQLへの対応が不完全なバージョンを利用しており、2.5.0がリリースされるまでは2.4.4以下のバージョンを使い続けなければいけません。
また、仮に2.5.0がリリースされたとしても、バージョンアップ作業は大変でしょうし、すぐバージョンアップは出来ないと思います。*2
そこで、このEC-CUBEをチューニング - MySQL編もまだ需要があると思いますので、続きを書いてみます。
前回のEC-CUBEをチューニング - MySQL:準備編で、EC-CUBEに大量の商品データを登録するところまでやりました。
今回は、テーブルの構造を出来るだけ変えずにパフォーマンスをアップさせる方法です。
レンタルサーバ等ではMySQLのパラメータの設定を変更出来ない環境も多いと思うので、テーブルやカラムの設定変更だけで出来るだけパフォーマンスを上げます。

前回準備した環境では遅過ぎて作業に支障が出るので、VM上に再度環境を構築しました。
PHP 5.2.13
MySQL 5.1.39

大カテゴリ
5
中カテゴリ
4
小カテゴリ
4
規格1
5
規格2
5
商品数
1000
商品数を減らしてカテゴリ、規格を増やしてみました。
標準の状態では全商品一覧の表示に13960msもかかってしまいました。遅いですねー

カラムの型を変更する。

EC-CUBEでは、テキストデータが入るカラムがtext型になっています。*3
しかしMySQLではtext型が設定されているカラムはインデックスに指定出来ませんし、min()等の関数で処理する際もかなり遅くなってしまいます。
なので、

  • dtb_productsのname、main_list_comment
  • dtb_produts_classのproduct_code*4

をchar型に変えてしまいます。
結果は10843msになりました。ちょっと速くなりましたね。


「おいおい、チューニングで大切なインデックスは?」
とツッコミたくなる方もいらっしゃると思いますが、EC-CUBEMySQLで動かす場合、PostgreSQLで動かす時のviewをサブクエリをガンガン ネストして表現しているので、あんまり意味がありません。
むしろ遅くなる事の方が多い様です。


次回は、もう少し踏込んで、テーブルを変えずにもっと劇的に変わる方法をご紹介します。

*1:残念!

*2:カスタマイズしていると余計に大変だと思います。

*3:多分PostgreSQL使う時の名残です

*4:ここ重要