LoginSignup
1
1

More than 5 years have passed since last update.

EC-CUBEプラグイン「SPPED-CUBE」導入記

Posted at

(※本記事はSPEED-CUBE ver1.7について記述しております)

SPPED-CUBEとは?

EC CUBEで商品やカテゴリの件数が多くなった、重くなった、そんな時に出会ったのがこのプラグインでした。
商品一覧を高速化するプラグイン SPEED-CUBE

プラグインを入れるだけで速くなる! すごい!

有効化するのも重い

プラグインをインストールして「有効化」をポチッ……
処理が終わらない……?
EC-CUBEの高速化プラグインでつまずいたこと
インデックスを張る操作に時間がかかって処理が終わんねー\(`Д´)ノ
そもそもデータ量が多くて困ってプラグインを入れようとしているのに、データ量が多いと処理が終わらないとは。

SPEED CUBE用のINDEXを手動で作成する

プラグインをインストール

プラグインを普通にインストールします。有効化はしない。

プラグインでCREATE INDEXを行わないようにする

data/downloads/plugin/WbmSpeedCube/WbmSpeedCube.phpのL151をコメントアウト。

  plg_WbmSpeedCube_Util::createIndexes(self::$_indexArray);

EC-CUBEのDBにINDEXを作成する(一部ALTER TABLEする)

CREATE INDEX plg_wbmspeedcube_d878de5a1d715929446251e6ec4f047e ON dtb_category (`parent_category_id`,`category_id`);
CREATE INDEX plg_wbmspeedcube_41d48b62d1b326c157bb43ebb1303900 ON dtb_category (`del_flg`,`rank`);

CREATE INDEX plg_wbmspeedcube_af58ff2160967a9e918aac57c9e22318 ON dtb_product_categories (product_id,rank);
CREATE INDEX plg_wbmspeedcube_eef72c3b525fc73ba229bff80fad5852 ON dtb_product_categories (`category_id`,`product_id`,`rank`);

CREATE INDEX plg_wbmspeedcube_eee278233028bfc51720d80ff07cca6e ON dtb_products (`maker_id`,`status`,`del_flg`);
CREATE INDEX plg_wbmspeedcube_6d5a5b6cf4d101dbad8bd2239b94d905 ON dtb_products (`status`,`del_flg`);

ALTER TABLE dtb_products_class MODIFY COLUMN product_code VARCHAR(255);
CREATE INDEX plg_wbmspeedcube_bfaf53a4613f781b99e1a24412568b15 ON dtb_products_class (`product_id`,`del_flg`,`price02`,`product_code`);
CREATE INDEX plg_wbmspeedcube_1ea985c6feb1ae8e82a4a128f679fcae ON dtb_products_class (`del_flg`,`product_id`,`price02`,`product_code`);

CREATE INDEX plg_wbmspeedcube_1d35ce71961c25dd25e53120fd49858a ON dtb_product_status (`product_status_id`,`del_flg`);

(※INDEX名はプラグインから自動的に作成してもこれになる)

プラグインを有効にする

チェックボックスぽちー
CREATE INDEXをしないようになっているので、有効化処理は一瞬で終わる。

張ったINDEXに対して色々とプラグインのコードがよしなにしてくれているみたいなので、プラグインは有効化しておく。

SPEED-CUBEにはバグがあるぞ~

プラグイン内 plg_WbmSpeedCube_Util.php の450行目あたりには

    foreach ($indexes as $tableName => $rows) {
        foreach ($rows as $indexName => $row) {
            $sql = 'CREATE INDEX ' . $indexName . ' ON ' . $tableName . ' ';
            $sql.= implode(',', $row) . ";\n";
        }
        self::getDbAdapter()->query($sql);
    }

というコードがあり、ものの見事に「テーブル1つにつきINDEXを1つしか作成してくれない」動作をしてくれています。
正しくはqueryが直上のforeachスコープの中かなーって。
なので、手動でINDEXを作成しない場合もここは直しておく必要有り。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1