バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > レスポンスを向上させるには

フロント機能

新規スレッドを追加する

フラット表示 前のトピック | 次のトピック
投稿者 スレッド
topo
投稿日時: 2008/12/20 18:37
対応状況: −−−
常連
登録日: 2008/6/11
居住地: 岡山
投稿: 64
条件付の改善
条件付ですが速度改善できました。

今回私のやっている案件はデータ件数約1万件と多いものの、

・1商品に1カテゴリで問題ない点
・規格の概念を利用しない点

上の2点をクライアントに取り付ける事が出来たのでかなり独自路線の
カスタマイズをする事で基本1秒以内の表示を実現できました。
同じような条件の方はご参考までにどうぞ。


■1:データ更新
まず『dtb_products.category_id』しか見ないようにするのでデータを更新します。
まだ作ってませんがデータ登録のタイミングで同様の処理を書いておけばいいかな?と思っています。

引用:

update dtb_products a set a.category_id = (select max(b.category_id) from dtb_product_categories b where a.product_id = b.product_id ) ;




■2:SQL修正
data\class\pages\products\lc_page_products_list.php

・要点1
デフォルトのソート方法が異常に重いので無視。新着順とした。

・要点2
vw_products_allclassのviewが死ぬほど重いので捨てた。

・要点3
単一テーブルを見る分にはdistinctなんて必要ないので外した

・要点4
極力Joinを外して取得した結果から『(select min(product_code) ・・・』のような形とした。
dtb_products_class.product_idはユニークキーなので数があるように見えるが負荷は小さい。

引用:

//処理にかかわらずfromはこの形
$col = "T1.product_id,"
. "(select min(product_code) from dtb_products_class where product_id = T1.product_id ) AS product_code_min,"
. "(select max(product_code) from dtb_products_class where product_id = T1.product_id ) AS product_code_max,"
. "(select min(price01) from dtb_products_class where product_id = T1.product_id ) AS price01_min,"
. "(select max(price01) from dtb_products_class where product_id = T1.product_id ) AS price01_max,"
. "(select min(price02) from dtb_products_class where product_id = T1.product_id ) AS price02_min,"
. "(select max(price02) from dtb_products_class where product_id = T1.product_id ) AS price02_max,"
. "(select min(stock) from dtb_products_class where product_id = T1.product_id ) AS stock_min,"
. "(select max(stock) from dtb_products_class where product_id = T1.product_id ) AS stock_max,"
. "(select min(stock_unlimited) from dtb_products_class where product_id = T1.product_id ) AS stock_unlimited_min,"
. "(select max(stock_unlimited) from dtb_products_class where product_id = T1.product_id ) AS stock_unlimited_max,"
. "T1.del_flg,"
. "T1.status,"
. "T1.name,"
. "T1.comment1,"
. "T1.comment2,"
. "T1.comment3,"
. "T1.main_list_comment,"
. "T1.main_image,"
. "T1.main_list_image,"
. "T1.product_flag,"
. "T1.deliv_date_id,"
. "T1.sale_limit,"
. "T1.point_rate,"
. "T1.sale_unlimited,"
. "T1.create_date,"
. "T1.deliv_fee,"
. "T1.rank,"
. "T1.category_id as category_id" ;
$from = "dtb_products AS T1";

//表示順序
switch($orderby) {

//価格順
case 'price':
$order = "price02_min, product_id";
break;

//新着順
case 'date':
$order = "create_date DESC, product_id";
break;

default:
$order = "create_date DESC, product_id";
break;




■3:以下のロジックのカット

まったく使っていなくても以下のロジックが入っているだけでやたら重い事がわかった。
今回私が規格の要素を使わないのでロジックを外した。

引用:

// 規格名一覧
// $arrClassName = $objDb->sfGetIDValueList("dtb_class", "class_id", "name");
// 規格分類名一覧
// $arrClassCatName = $objDb->sfGetIDValueList("dtb_classcategory", "classcategory_id", "name");
// 規格セレクトボックス設定
// if($disp_num == 15) {
// for($i = 0; $i < count($this->arrProducts); $i++) {
// $this->lfMakeSelect($this->arrProducts[$i]['product_id'], $arrClassName, $arrClassCatName);
// // 購入制限数を取得
// $this->lfGetSaleLimit($this->arrProducts[$i]);
// }
// }



フラット表示 前のトピック | 次のトピック


題名 投稿者 日時
   レスポンスを向上させるには delsol 2008/10/28 11:31
     Re: レスポンスを向上させるには delsol 2008/10/28 11:58
       Re: レスポンスを向上させるには topo 2008/12/13 16:16
         Re: レスポンスを向上させるには topo 2008/12/14 11:11
         » 条件付の改善 topo 2008/12/20 18:37

 



ログイン


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

統計情報

総メンバー数は89,355名です
総投稿数は110,082件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2314
5
umebius
2085
6
yuh
1819
7
h_tanaka
1652
8
red
1570
9
mcontact
1304
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.