SOY Shopの標準機能である管理画面からの注文の機能を活用している方から下記のような要望があった。




SOY Shopで在庫管理の業務アプリに向けての機能追加の記事で紹介した商品検索して選ぶの機能の検索速度を速くすることは可能か?と。

連絡があった方の管理画面で商品検索をしてみたが、結果が返ってくるまでに10秒近く要した。

商品数が1000件を超え、商品グループ機能も活用している事が検索速度を遅くしている要因だった。


電話での注文で管理画面からの注文の機能を活用しているとのことで、電話が長くなって時間的ロスや他の電話を取れないといった機会損出が大きくなるそうだ。

というわけで、下記の二つの機能を追加してみた。

・商品名、商品コードでAND( or OR)検索

・子商品を商品検索の対象から外す設定

商品グループでバリエーションのある商品を取り扱う - SOY Shopを使ってみよう


前者は元からあった機能ではあるが、ANDかORを手軽に選ぶ事で検索時間を短縮する。

それ以上にインパクトがあるのが、子商品を商品検索の対象から外す設定で、検索時のSQLの発行で

SELECT * FROM soyshop_item WHERE (item_name LIKE :name_0 OR id IN (SELECT item_type FROM soyshop_item WHERE item_name LIKE :child_0)) AND ...;

上記のようなコードを複数キーワード分設けると検索の負荷は相当のものになる。

※子商品ではitem_typeに親商品の商品IDを入れている為、サブクエリ内のitem_typeが数字か文字(親商品の場合はsingle等の文字列になる)の扱いになっていて更に厄介


そこで、子商品の方のサブクエリをごっそりと削る設定を設けてみたところ、10秒近く要した検索が1秒以内に短縮できた。

子商品の機能を利用していないショップサイトは多いだろうから、今回の機能はいろんなサイトで大きな恩恵がありそうだ。


今回対応分を含んだパッケージは下記のサイトからダウンロード出来ます。

https://saitodev.co/soycms/soyshop/