ブログ BLOG

EC-CUBE MYSQLでの速度改善03

EC-CUBE MYSQLでの速度改善03 # EC-CUBE MYSQLでの速度改善03 会員データと受注データが増えてきた場合の対応 受注データと会員データが増えてきた場合、購入時にタイムアウトする場合があります。 その場合の対応方法で、 データベースで負荷をかけない速い検索の方法は **PRIMARY KEY** もしくは **適切にINDEX** を使用する事で 問題となる部分は SC_Customer.phpの ```php public function updateOrderSummary($customer_id) { $objQuery =& SC_Query_Ex::getSingletonInstance(); $col = <<< __EOS__ SUM( payment_total) AS buy_total, COUNT(order_id) AS buy_times, MAX( create_date) AS last_buy_date, MIN(create_date) AS first_buy_date __EOS__; $table = 'dtb_order'; $where = 'customer_id = ? AND del_flg = 0 AND status <> ?'; $arrWhereVal = array($customer_id, ORDER_CANCEL); $arrOrderSummary = $objQuery->getRow($col, $table, $where, $arrWhereVal); $objQuery->update('dtb_customer', $arrOrderSummary, 'customer_id = ?', array($customer_id)); } ``` この場合、大量の受注データ(dtb_order)からindexの効いてないカラムで検索し、さらに重たい集計処理を4パターン行なっていることが原因です。 この部分の速度を改善する方法はPRIMARY KEYを使用する事です。 この場合、dtb_orderなのでPRIMARY KEYのorder_idを使用できれば一番速く集計を行うことができます。 新しくcustomer_idとorder_idのカラムのテーブルを用意して、適切にindexを貼り会員が購入した時にそのテーブルにひたすたデータを入れていきます。 そのテーブルを元に先ほどのメソッドのクエリを書き換えると、 そのユーザーの今まで購入した受注のみPRIMARY KEYで絞り込んだ結果を集計するので、 受注件数によりますが速度が **劇的** に速くなります。 まだ何か所か受注データが増えた場合に重たくなる箇所がありますが、それは別の機会に。 # 今日も速いEC-CUBE仕上がってます。 お問い合わせは[こちら](https://www.sunday.systems/contact)から。

お問合せ

サンデイシステムズへのお問合わせは、下記よりコンタクトフォームをご利用下さい。
担当の者より、追ってご連絡させていただきます。

GO TO PAGE TOP