バージョン選択

フォーラム

メニュー

オンライン状況

37 人のユーザが現在オンラインです。 (19 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 36
zakey もっと...

サイト内検索

質問 > 管理機能 > 商品情報の項目追加についての最適化

管理機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mizuvan
投稿日時: 2017/4/14 17:26
対応状況: 解決済
長老
登録日: 2013/3/26
居住地:
投稿: 253
商品情報の項目追加についての最適化
商品情報に項目をどんどん追加して、結果100項目以上を追加する状態となってしまいました

そこでお聞きしたいのですが、dtb_products へ現在追加していますがこれらは、例えば dtb_products_2 、dtb_products_3 といった具合に分けたほうが読み込み速度などが向上して最適化されるものでしょうか?

どうも最近、商品一覧の表示に時間がかかるような気がします。

どなたかアドバイスをいただけますと嬉しいです



[EC-CUBE] 2.13.2
[レンタルサーバ] チカッパ
[OS] Windows10
[PHP] 5.4.45
[データベース] MySQL 5.6.13
[WEBサーバ] Apache
[ブラウザ] Chrome 56.0


----------------

468
投稿日時: 2017/4/14 22:44
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 商品情報の項目追加についての最適化
追加された項目が常に必要では無い場合は、テーブルを分けたほうが良いかと思いますが、
商品として情報を扱う時に必ず必要なのであれば1つのテーブルにしたほうが効率が良いのではないかと思います。
基本的にテーブルの結合が無いSQLのほうが速いと思います。

表示速度の場合、DB以外にボトルネックがある可能性もあると思います。


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

umebius
投稿日時: 2017/4/15 7:07
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: 商品情報の項目追加についての最適化
どちらのケースも目にするので、何が正解というわけではありませんが。
商品数はどの程度か、100以上の項目はどういうタイプが多いのかなどにもよりますね。
一度に読み込む項目が多ければ多いほどメモリ消費が増えるのは間違いないです。

SELECTで読み込む列を限定するだけで劇的に表示速度が改善したなんていう例も見たことがあります。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

mizuvan
投稿日時: 2017/4/15 14:11
対応状況: 解決済
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品情報の項目追加についての最適化
ありがとうございます。

商品情報としての項目がほとんどですので1つのテーブルの方が良さそうです。DB以外を探ってみます


----------------

mizuvan
投稿日時: 2017/4/15 14:13
対応状況: −−−
長老
登録日: 2013/3/26
居住地:
投稿: 253
Re: 商品情報の項目追加についての最適化
ありがとうございます

SELECTで限定する手もあったのですね
勉強になりました!


----------------

yuh
投稿日時: 2017/4/19 0:52
対応状況: −−−
登録日: 2013/1/9
居住地: 大阪
投稿: 1819
Re: 商品情報の項目追加についての最適化
よっぽど変なPHPを書かない限りDBがボトルネックになります。

商品数によってですが、商品数がある程度増えた場合最初に重たくなるのが商品一覧で、
次におすすめ商品のブロックを設置しているページになります。

LC_Page_Products_List.phpの商品を検索している部分のクエリで
COUNT(*)している部分と、実際に検索している部分の二つメインのクエリがありますが、
そのクエリをSQL_CALC_FOUND_ROWSでまとめて取ってしまう方法とか、
SC_ProductsのJOINしている部分を少し変更する方法があります。
SQL_CALC_FOUND_ROWSの方は少しめんどくさいので割愛。
SC_Productsの方は
getListByProductIdsに渡された$arrProductIdをlistsに渡して、そのままalldtlSQLまで渡したうえで$objDBFactory->alldtlSQLに渡して
その中で


    ,T4.point_rate
                    ,T4.deliv_fee
                    ,dtb_maker.name AS maker_name
                FROM dtb_products
                    INNER JOIN (
                        SELECT product_id
                            ,MIN(product_code) AS product_code_min

このようになっている部分を$arrProductIdにデータがある場合のみ

    ,T4.point_rate
                    ,T4.deliv_fee
                    ,dtb_maker.name AS maker_name
                FROM 
( SELECT * FROM dtb_products WHERE product_id IN (' . implode(",",($product_id_ary)) . ') ) as dtb_products
                    INNER JOIN (
                        SELECT product_id
                            ,MIN(product_code) AS product_code_min

このような形で絞り込んだ上でINNER JOIN する事で読み込みが速くなります。

もっと色々手を加えればもっと速くなりますよ。


----------------


http://ec-lab.net/

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,638名です
総投稿数は109,889件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2311
5
umebius
2085
6
yuh
1819
7
h_tanaka
1635
8
red
1569
9
mcontact
1265
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.