0

大量のデータ(6000)を含む3つのデータベーステーブルがあります。正常に動作しているいくつかの操作について、次のクエリを作成しました。

UPDATE productlistprice prl SET prl.value = (
    SELECT minprice FROM(
       SELECT  MIN(prl.value) AS minprice, prv.productmasterid AS masterprid 
            FROM product pr , productlistprice prl, productvariation prv 
              WHERE prv.productmasterid = (
       SELECT prv.productmasterid  FROM  productvariation pv 
              WHERE pv.productid = pr.uuid) 
              AND prl.productid = pr.uuid AND prl.productid  = prv.productid 
                    GROUP BY prv.productmasterid) 
              WHERE masterprid = (SELECT prv.productmasterid
              FROM productvariation prv WHERE prv.productmasterid = prl.productid 
                    GROUP BY prv.productmasterid)) 
              WHERE prl.productid = (
       SELECT prv.productmasterid FROM productvariation prv 
              WHERE prv.productmasterid = prl.productid 
GROUP BY prv.productmasterid );

ただし、このクエリのパフォーマンスは少し遅くなります。レコードの更新には21秒かかります。このクエリをどこで改善できますか。どんな提案も大いに活用されます

4

1 に答える 1

0

基礎となるデータモデルを理解していないと、このクエリを理解するのが難しくなります。たとえば、update ステートメントの where 句がわかりません。

update productlistprice prl
   ...
 where prl.productid = (select prv.productmasterid
                          from productvariation prv
                         where prv.productmasterid = prl.productid
                         group by prv.productmasterid);

productmasterID と同じ ID を持つレコードのみを更新したいということですか? また、group by 句の目的は何ですか?

読みやすくするために:

update productlistprice prl
   set prl.value =
       (select minprice
          from (select min(prl.value) as minprice
                      ,prv.productmasterid as masterprid
                  from product          pr
                      ,productlistprice prl
                      ,productvariation prv
                 where prv.productmasterid = (select prv.productmasterid
                                                from productvariation pv
                                               where pv.productid = pr.uuid)
                   and prl.productid = pr.uuid
                   and prl.productid = prv.productid
                 group by prv.productmasterid)
         where masterprid = (select prv.productmasterid
                               from productvariation prv
                              where prv.productmasterid = prl.productid
                              group by prv.productmasterid))
 where prl.productid = (select prv.productmasterid
                          from productvariation prv
                         where prv.productmasterid = prl.productid
                         group by prv.productmasterid);
于 2012-11-05T12:25:50.913 に答える