Ignore:
Timestamp:
2014/05/08 16:48:21 (7 years ago)
Author:
Seasoft
Message:

#2538 (商品一覧取得のDB処理で商品規格を全件処理している)

  • まずは、PostgreSQL でデバッグ。
    • インデックスは無くても良好なパフォーマンスだったが、有るとレスポンスが安定する(そして僅かだが改善傾向となる)ようなので一応追加した。(IOが減っている為と推測) 登録時の負荷増加や管理コストを考えると、実際に必要かは微妙な線。dtb_index_list への追加で良いのかもしれない。
  • 別箇所の改修も検討しており、ひと通り落ち着いてから MySQL 動作を分析・調整する計画。
File:
1 edited

Legend:

Unmodified
Added
Removed
  • branches/version-2_13-dev/data/class/SC_Product.php

    r23378 r23404  
    195195     * 商品詳細を取得する. 
    196196     * 
    197      * @param  integer $productId 商品ID 
     197     * @param  integer $product_id 商品ID 
    198198     * @return array   商品詳細情報の配列 
    199199     */ 
    200     public function getDetail($productId) 
     200    public function getDetail($product_id) 
    201201    { 
    202202        $objQuery =& SC_Query_Ex::getSingletonInstance(); 
    203         $arrProduct = $objQuery->getRow('*', $this->alldtlSQL('product_id = ?'), 
    204                                     'product_id = ?', 
    205                                     array($productId, $productId)); 
    206         $arrProduct = (array) $arrProduct; 
     203 
     204        $from = $this->alldtlSQL(); 
     205        $where = 'product_id = ?'; 
     206        $arrWhereVal = array($product_id); 
     207        $arrProduct = (array)$objQuery->getRow('*', $from, $where, $arrWhereVal); 
    207208 
    208209        // 税込金額を設定する 
     
    631632         * 商品(dtb_products)ごとの設定なので MAX のみを取得する. 
    632633         */ 
     634        $sub_base = "FROM dtb_products_class WHERE del_flg = 0 AND product_id = dtb_products.product_id $where_products_class"; 
    633635        $sql = <<< __EOS__ 
    634636            ( 
    635637                SELECT 
    636                      dtb_products.product_id 
    637                     ,dtb_products.name 
    638                     ,dtb_products.maker_id 
    639                     ,dtb_products.status 
    640                     ,dtb_products.comment1 
    641                     ,dtb_products.comment2 
    642                     ,dtb_products.comment3 
    643                     ,dtb_products.comment4 
    644                     ,dtb_products.comment5 
    645                     ,dtb_products.comment6 
    646                     ,dtb_products.note 
    647                     ,dtb_products.main_list_comment 
    648                     ,dtb_products.main_list_image 
    649                     ,dtb_products.main_comment 
    650                     ,dtb_products.main_image 
    651                     ,dtb_products.main_large_image 
    652                     ,dtb_products.sub_title1 
    653                     ,dtb_products.sub_comment1 
    654                     ,dtb_products.sub_image1 
    655                     ,dtb_products.sub_large_image1 
    656                     ,dtb_products.sub_title2 
    657                     ,dtb_products.sub_comment2 
    658                     ,dtb_products.sub_image2 
    659                     ,dtb_products.sub_large_image2 
    660                     ,dtb_products.sub_title3 
    661                     ,dtb_products.sub_comment3 
    662                     ,dtb_products.sub_image3 
    663                     ,dtb_products.sub_large_image3 
    664                     ,dtb_products.sub_title4 
    665                     ,dtb_products.sub_comment4 
    666                     ,dtb_products.sub_image4 
    667                     ,dtb_products.sub_large_image4 
    668                     ,dtb_products.sub_title5 
    669                     ,dtb_products.sub_comment5 
    670                     ,dtb_products.sub_image5 
    671                     ,dtb_products.sub_large_image5 
    672                     ,dtb_products.sub_title6 
    673                     ,dtb_products.sub_comment6 
    674                     ,dtb_products.sub_image6 
    675                     ,dtb_products.sub_large_image6 
    676                     ,dtb_products.del_flg 
    677                     ,dtb_products.creator_id 
    678                     ,dtb_products.create_date 
    679                     ,dtb_products.update_date 
    680                     ,dtb_products.deliv_date_id 
    681                     ,T4.product_code_min 
    682                     ,T4.product_code_max 
    683                     ,T4.price01_min 
    684                     ,T4.price01_max 
    685                     ,T4.price02_min 
    686                     ,T4.price02_max 
    687                     ,T4.stock_min 
    688                     ,T4.stock_max 
    689                     ,T4.stock_unlimited_min 
    690                     ,T4.stock_unlimited_max 
    691                     ,T4.point_rate 
    692                     ,T4.deliv_fee 
    693                     ,T4.class_count 
     638                     dtb_products.* 
    694639                    ,dtb_maker.name AS maker_name 
     640                    ,(SELECT MIN(product_code) $sub_base) AS product_code_min 
     641                    ,(SELECT MAX(product_code) $sub_base) AS product_code_max 
     642                    ,(SELECT MIN(price01) $sub_base) AS price01_min 
     643                    ,(SELECT MAX(price01) $sub_base) AS price01_max 
     644                    ,(SELECT MIN(price02) $sub_base) AS price02_min 
     645                    ,(SELECT MAX(price02) $sub_base) AS price02_max 
     646                    ,(SELECT MIN(stock) $sub_base) AS stock_min 
     647                    ,(SELECT MAX(stock) $sub_base) AS stock_max 
     648                    ,(SELECT MIN(stock_unlimited) $sub_base) AS stock_unlimited_min 
     649                    ,(SELECT MAX(stock_unlimited) $sub_base) AS stock_unlimited_max 
     650                    ,(SELECT MAX(point_rate) $sub_base) AS point_rate 
     651                    ,(SELECT MAX(deliv_fee) $sub_base) AS deliv_fee 
     652                    ,(SELECT COUNT(*) $sub_base) AS class_count 
    695653                FROM dtb_products 
    696                     JOIN ( 
    697                         SELECT product_id, 
    698                             MIN(product_code) AS product_code_min, 
    699                             MAX(product_code) AS product_code_max, 
    700                             MIN(price01) AS price01_min, 
    701                             MAX(price01) AS price01_max, 
    702                             MIN(price02) AS price02_min, 
    703                             MAX(price02) AS price02_max, 
    704                             MIN(stock) AS stock_min, 
    705                             MAX(stock) AS stock_max, 
    706                             MIN(stock_unlimited) AS stock_unlimited_min, 
    707                             MAX(stock_unlimited) AS stock_unlimited_max, 
    708                             MAX(point_rate) AS point_rate, 
    709                             MAX(deliv_fee) AS deliv_fee, 
    710                             COUNT(*) as class_count 
    711                         FROM dtb_products_class 
    712                         WHERE del_flg = 0 $where_products_class 
    713                         GROUP BY product_id 
    714                     ) AS T4 
    715                         ON dtb_products.product_id = T4.product_id 
    716654                    LEFT JOIN dtb_maker 
    717655                        ON dtb_products.maker_id = dtb_maker.maker_id 
Note: See TracChangeset for help on using the changeset viewer.