DB設計を見直してEC-CUBEを高速化する

EC-CUBEのDB設計は、お世辞にもきれいとはいえない。
MySQLでいうと、文字列型はすべてTEXT型になっている。

インデックスすらあまり使われていない。

dtb_session の sess_id は一意なはずなので、ユニークにしたほうがいいと思います。

プライマリキーに変更する。

ALTER TABLE `dtb_session` ADD PRIMARY KEY ( `sess_id` ( 32 ) );
ALTER TABLE `dtb_session` DROP INDEX `dtb_session_sess_id_key`;

またテーブルやカラムの照合順序は、データベースの照合順序が継承される。
もし照合順序が utf8_general_ci だったり utf8_bin となっている場合は、utf8_unicode_ci に変更したほうがいい。

特に大文字、小文字の区別をする必要のあるカラムはないと思う。
[参考記事]utf8_unicode_ci



郵便番号検索は、検索に1.7935秒かかる。
ここで郵便番号のカラムに、インデックスをはると

ALTER TABLE `mtb_zip` ADD INDEX `zipcode` ( `zipcode` ( 7 ) );

0.0008秒まで高速化される。

またこの検索のコード部分
/data/class/pages/LC_Page_InputZip.php

$sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ?";

EC-CUBEでは重複する郵便番号を考慮していないので、ここは

$sqlse = "SELECT state, city, town FROM mtb_zip WHERE zipcode = ? LIMIT 1";

のように、LIMITは付けておきたい。

スポンサーリンク

関連記事

スポンサーリンク

~演算子 正規表現によるパターンマッチング

ホームページ製作・web系アプリ系の製作案件募集中です。

上に戻る