※この記事はEC-CUBE2.4系を想定しております。
EC-CUBEでは標準でメール配信機能が付いています。
利用方法としては、簡単にですが下記になります。
A.配信顧客の条件を作成
↓
B.配信内容を作成
↓
C.配信開始
配信が始まると下記のような処理を行います。
1.送信対象を抽出
↓
2.送信内容を抽出
↓
---対象がなくなるまで-----
3.件名/文章の作成(差し込みはid/nameのみ)
↓
4.メール配信
↓
5.送信件数をdtb_send_historyに更新
↓
6.dtb_send_customerに送信履歴を更新
-----ここまでの処理を繰り返す-----
↓
7.終了をDBに書き込み
↓
8.完了メールを管理者に送信
※以下のファイルを参考
/data/class/pages/admin/mail/LC_Page_Admin_Mail_Sendmail.php
一部テーブル名を書いてますが、ここが大事です!
結論から言いますと、下記カラムにINDEXを貼る事により、早くなります。
dtb_send_history.send_id
dtb_send_customer.send_id + dtb_send_customer.customer_id
理由はですが、
EC-CUBEのテーブル構成は、必要箇所以外はインデックスが貼られていません。
(2.4系では)
で、問題となるのが4.5.の処理です。
通常1秒以内にSQLの処理が完了すれば、体感速度的には遅いとは感じないと思われます。
ただし、それが100回くらいの実行になると話が変わってきます。
0.8秒を100回=80秒
0.01秒を100回=1秒
と、1分以上かかるか、1秒で終わるかと雲泥の差です。
インデックス未設定の場合、数百万レコードある、dtb_send_customerに対して5の処理を1回だけ実行した場合ですが、1秒程かかります。
これがインデックス設定後には、10ミリ秒以下まで早くなりました。
もし、少しでも早くしたい、と思ってる方は試してみて下さい。
・・・ちなみにデメリットもあります。
送信対象リストを作成する場合に(上記ですとB.にあたります。)に設定前より時間がかかってしまうことです。
といっても、30分も1時間も関わる訳ではないので、私の場合は、結果全体的に早くなりました。
・・・です。
ちなみに最初はMTA自体の変更まで考えました。。。まさかDB側がボトルネックになっていたとはです。
- オープンソースECサイト構築ソフトEC‐CUBE(Ver2.4.0対応)公式ガイドブック カス.../オレンジ 岸本
- ¥2,835
- Amazon.co.jp