CC-4620: Now Playing page loading is very slow because 1M records in cc_schedule table

-fixed
This commit is contained in:
Martin Konecny 2012-10-23 17:45:55 -04:00
parent a73aef6cd8
commit 4daaa776e2
2 changed files with 28 additions and 20 deletions

View File

@ -263,6 +263,15 @@ SQL;
global $CC_CONFIG;
$con = Propel::getConnection();
$p_start_str = $p_start->format("Y-m-d H:i:s");
$p_end_str = $p_end->format("Y-m-d H:i:s");
//We need to search 24 hours before and after the show times so that that we
//capture all of the show's contents.
$p_track_start= $p_start->sub(new DateInterval("PT24H"))->format("Y-m-d H:i:s");
$p_track_end = $p_end->add(new DateInterval("PT24H"))->format("Y-m-d H:i:s");
$templateSql = <<<SQL
SELECT DISTINCT sched.starts AS sched_starts,
sched.ends AS sched_ends,
@ -288,12 +297,12 @@ SQL;
$filesJoin = <<<SQL
cc_schedule AS sched
JOIN cc_files AS ft ON (sched.file_id = ft.id
AND ((sched.starts >= '{$p_start}'
AND sched.starts < '{$p_end}')
OR (sched.ends > '{$p_start}'
AND sched.ends <= '{$p_end}')
OR (sched.starts <= '{$p_start}'
AND sched.ends >= '{$p_end}'))
AND ((sched.starts >= '{$p_track_start}'
AND sched.starts < '{$p_track_end}')
OR (sched.ends > '{$p_track_start}'
AND sched.ends <= '{$p_track_end}')
OR (sched.starts <= '{$p_track_start}'
AND sched.ends >= '{$p_track_end}'))
)
SQL;
@ -315,12 +324,12 @@ SQL;
$streamJoin = <<<SQL
cc_schedule AS sched
JOIN cc_webstream AS ws ON (sched.stream_id = ws.id
AND ((sched.starts >= '{$p_start}'
AND sched.starts < '{$p_end}')
OR (sched.ends > '{$p_start}'
AND sched.ends <= '{$p_end}')
OR (sched.starts <= '{$p_start}'
AND sched.ends >= '{$p_end}'))
AND ((sched.starts >= '{$p_track_start}'
AND sched.starts < '{$p_track_end}')
OR (sched.ends > '{$p_track_start}'
AND sched.ends <= '{$p_track_end}')
OR (sched.starts <= '{$p_track_start}'
AND sched.ends >= '{$p_track_end}'))
)
LEFT JOIN cc_subjs AS sub ON (ws.creator_id = sub.id)
SQL;
@ -358,12 +367,12 @@ SELECT showt.name AS show_name,
JOIN cc_show AS showt ON (showt.id = si.show_id)
WHERE si.modified_instance = FALSE
$showPredicate
AND ((si.starts >= '{$p_start}'
AND si.starts < '{$p_end}')
OR (si.ends > '{$p_start}'
AND si.ends <= '{$p_end}')
OR (si.starts <= '{$p_start}'
AND si.ends >= '{$p_end}'))
AND ((si.starts >= '{$p_start_str}'
AND si.starts < '{$p_end_str}')
OR (si.ends > '{$p_start_str}'
AND si.ends <= '{$p_end_str}')
OR (si.starts <= '{$p_start_str}'
AND si.ends >= '{$p_end_str}'))
ORDER BY si_starts,
sched_starts;
SQL;

View File

@ -423,8 +423,7 @@ class Application_Model_ShowBuilder
}
$scheduled_items = Application_Model_Schedule::GetScheduleDetailItems(
$this->startDT->format("Y-m-d H:i:s"), $this->endDT->format(
"Y-m-d H:i:s"), $shows);
$this->startDT, $this->endDT, $shows);
for ($i = 0, $rows = count($scheduled_items); $i < $rows; $i++) {