0

最適化している MySQL クエリがあり、現在、2 つの依存/相関サブクエリがあります。

これらを回避するために書き直すことが可能かどうか疑問に思っていましたか?

SELECT *
FROM `pp_slides` 
JOIN `pp_slide_content` 
    ON `pp_slides`.`id` = `pp_slide_content`.`slide_id` 
    AND `pp_slide_content`.`version` = (
        SELECT max(`version`) FROM `pp_slide_content` WHERE `slide_id` = `pp_slides`.`id`
    )

LEFT JOIN `pp_published_slides` 
    ON `pp_published_slides`.`slide_id` = `pp_slides`.`id` 
    AND `pp_published_slides`.`slide_version` = `pp_slide_content`.`version` 
    AND `pp_published_slides`.`publish_id` = (
        SELECT max(`publish_id`) FROM `pp_published_slides` WHERE `pp_published_slides`.`slide_id` = `pp_slides`.`id` AND `pp_published_slides`.`slide_version` = `pp_slide_content`.`version`
    ) 


LEFT JOIN `pp_publish` ON `pp_publish`.`id` = `publish_id`

WHERE `pp_slides`.`product_id` =  '2'
AND `pp_slides`.`country_code` =  'gb'

簡単な概要: スライドが作成され、バージョン化された変更がサポートされます。その後、スライド (およびその他のエンティティ) が発行されます。発行されるスライドとバージョンは、pp_published_slides テーブルに設定されます。パブリッシュ オブジェクト全体は pp_publish に保存されます。

上記の SQL は、スライド オブジェクトを読み込み、最新バージョン、公開時期などに関する追加データを含めます。

これがsqlfiddle http://sqlfiddle.com/#!2/902fb4/1です

私のSQL知識の限界で、どんな助けも大歓迎です....

4

1 に答える 1

2

相関サブクエリなしで書き換えられたクエリの一部を示す例を次に示します...

SELECT s.*
     , c.*
  FROM slides s  
  JOIN slide_content c
    ON c.slide_id = s.id
  JOIN ( SELECT slide_id, MAX(version) max_version FROM slide_content GROUP BY slide_id ) x
    ON x.slide_id = c.slide_id
   AND x.max_version = c.version 
 WHERE s.product_id = 2
   AND s.country_code = 'gb';
于 2014-10-09T12:35:56.877 に答える