[mythtv] Scheduler needs table keys?
Paul Andreassen
paulx at andreassen.com.au
Sun Jan 28 12:32:07 UTC 2007
On Sun, 28 Jan 2007 03:21 pm, Brian Schott wrote:
> Oops, I stand corrected. There are indexes on the title and
> description tables. Have you rebuilt the database? This is what
> Debian does, but I don't think the cron job comes with fedora packages.
snip
> more /etc/cron.weekly/mythtv-database
> #!/bin/sh
> # /etc/cron.weekly/mythtv-database script - check and backup
> mythconverg tables
> # Copyright 2005/12/02 2006/10/08 Paul Andreassen
snip
> /usr/bin/mysqlcheck $DEBIAN -s $DBNAME
>
> /usr/bin/savelog -c 7 -l -n -q $BACKUP
>
> /usr/bin/mysqldump $DEBIAN $OPTIONS $DBNAME | gzip > $BACKUP
>
> /usr/bin/logger -p daemon.info -i -t${0##*/} "$DBNAME checked and
> backedup."
>
> # End of file.
>
Hi Brian,
I'm pretty sure that mysqlcheck only checks the tables and not optimises them.
I'm also a firm believer in not messing with working tables. Database are
built for stability and speed. Optimising tables only removes excess space,
etc from them and shouldn't produce significate speedups. This is why
my /etc/cron.weekly/mythtv-database script found in the debian packages only
checks and backups.
Alright here is a quick run down of changes I could suggest to improve
schedule time for 0.20fixes. This is very rough and would need testing to
prove any advantage. The best keys to try would be the two for
Scheduler::UpdateMatches.
void Scheduler::BuildNewRecordsQueries(int recordid, QStringList &from,
sort by search / RecSearchType
query = QString("SELECT recordid,search,subtitle,description "
"FROM %1 WHERE search <> %2 AND "
"(recordid = %3 OR %4 = -1) ")
.arg(recordTable).arg(kNoSearch).arg(recordid).arg(recordid);
replace with
query = QString("SELECT recordid,search,subtitle,description "
"FROM %1 WHERE search <> %2 AND "
"(recordid = %3 OR %4 = -1) ORDER BY search")
.arg(recordTable).arg(kNoSearch).arg(recordid).arg(recordid);
key on RECTABLE.recordid, RECTABLE.search
QString s("RECTABLE.search = :NRST AND "
"(RECTABLE.recordid = :NRRECORDID OR :NRRECORDID = -1) AND "
Is this replaced with progfindid?
case kManualSearch:
UpdateManuals(result.value(0).toInt());
void Scheduler::UpdateMatches(int recordid) {
key on channel.chanid, channel.visible (move to ON), channel.callsign
"FROM (RECTABLE, program INNER JOIN channel "
" ON channel.chanid = program.chanid) ") + fromclauses[clause] + QString(
" WHERE ") + whereclauses[clause] + QString(" AND channel.visible = 1 AND "
...
" ((RECTABLE.station = channel.callsign) " // channel matches
replace with
"FROM (RECTABLE, program INNER JOIN channel "
" ON (channel.chanid = program.chanid AND channel.visible = 1) ) ") +
fromclauses[clause] + QString(
" WHERE ") + whereclauses[clause] + QString(" AND "
...
" ((RECTABLE.station = channel.callsign) " // channel matches
key on program.chanid, program.manualid, program.title
"FROM (RECTABLE, program INNER JOIN channel "
" ON channel.chanid = program.chanid) ") + fromclauses[clause] + QString(
... (BuildNewRecordsQueries)
"program.manualid = 0 AND "
"program.title = RECTABLE.title ");
void Scheduler::AddNewRecords(void)
{
" INNER JOIN channel ON (channel.chanid = program.chanid) "
maybe change to (probably optimised out)
" INNER JOIN channel ON (recordmatch.chanid = channel.chanid) "
key on cardinput.sourceid
" INNER JOIN cardinput ON (channel.sourceid = cardinput.sourceid) "
BUG 1000 != ABC
" LEFT JOIN oldrecorded as oldrecstatus ON "
" ( oldrecstatus.station = channel.callsign AND "
" oldrecstatus.starttime = program.starttime AND "
" oldrecstatus.title = program.title ) "
should be (is it needed at all, maybe should match on callsigns)
" LEFT JOIN oldrecorded as oldrecstatus ON "
" ( oldrecstatus.station = channel.chanid AND "
" oldrecstatus.starttime = program.starttime AND "
" oldrecstatus.title = program.title ) "
key on RECTABLE.recordid, RECTABLE.dupmethod
" INNER JOIN RECTABLE ON (recordmatch.recordid = RECTABLE.recordid) "
...
" RECTABLE.dupmethod > 1 AND "
key on oldrecorded.title, oldrecorded.duplicate, oldrecorded.programid
" LEFT JOIN oldrecorded ON "
...
" oldrecorded.duplicate <> 0 AND "
" program.title = oldrecorded.title "
...
" AND program.programid = oldrecorded.programid) "
key on oldrecorded.title, oldrecorded.duplicate, oldrecorded.findid
" LEFT JOIN oldrecorded ON "
...
" oldrecorded.duplicate <> 0 AND "
" program.title = oldrecorded.title "
...
" (oldrecorded.findid <> 0 AND "
" oldrecorded.findid = ") + progfindid + QString(") "
key on oldrecorded.title, oldrecorded.duplicate, oldrecorded.subtitle
" LEFT JOIN oldrecorded ON "
...
" oldrecorded.duplicate <> 0 AND "
" program.title = oldrecorded.title "
...
" AND program.subtitle = oldrecorded.subtitle)) "
key on oldrecorded.title, oldrecorded.duplicate, oldrecorded.description
" LEFT JOIN oldrecorded ON "
...
" oldrecorded.duplicate <> 0 AND "
" program.title = oldrecorded.title "
...
" AND program.description = oldrecorded.description)) "
key on program.chanid, program.starttime, program.manualid, program.programid,
program.generic, program.subtitle
" INNER JOIN program ON (recordmatch.chanid = program.chanid AND "
" recordmatch.starttime = program.starttime AND "
" recordmatch.manualid = program.manualid) "
...
" (program.programid <> '' AND program.generic = 0 "
" AND program.programid = oldrecorded.programid) "
...
" (((RECTABLE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
" AND program.subtitle = oldrecorded.subtitle)) "
key on program.chanid, program.starttime, program.manualid, program.programid,
program.generic, program.description
" INNER JOIN program ON (recordmatch.chanid = program.chanid AND "
" recordmatch.starttime = program.starttime AND "
" recordmatch.manualid = program.manualid) "
...
" (program.programid <> '' AND program.generic = 0 "
" AND program.programid = oldrecorded.programid) "
...
" (((RECTABLE.dupmethod & 0x04) = 0) OR (program.description <> '' "
" AND program.description = oldrecorded.description)) "
key on recorded.title, recorded.recgroup, recorded.duplicate, recorded.findid
" LEFT JOIN recorded ON "
...
" recorded.duplicate <> 0 AND "
" program.title = recorded.title AND "
" recorded.recgroup <> 'LiveTV' "
...
" (recorded.findid <> 0 AND "
" recorded.findid = ") + progfindid + QString(") "
key on recorded.title, recorded.recgroup, recorded.duplicate,
recorded.programid, recorded.subtitle
" LEFT JOIN recorded ON "
...
" recorded.duplicate <> 0 AND "
" program.title = recorded.title AND "
" recorded.recgroup <> 'LiveTV' "
...
" AND program.programid = recorded.programid) "
...
" (((RECTABLE.dupmethod & 0x02) = 0) OR (program.subtitle <> '' "
" AND program.subtitle = recorded.subtitle)) "
key on recorded.title, recorded.recgroup, recorded.duplicate,
recorded.programid, recorded.description
" LEFT JOIN recorded ON "
...
" recorded.duplicate <> 0 AND "
" program.title = recorded.title AND "
" recorded.recgroup <> 'LiveTV' "
...
" AND program.programid = recorded.programid) "
...
" (((RECTABLE.dupmethod & 0x04) = 0) OR (program.description <> '' "
" AND program.description = recorded.description)) "
do we need this
" ORDER BY RECTABLE.recordid DESC "
Thanks,
Paul
--
More information about the mythtv-dev
mailing list