[mythtv-users] [PATCH] Full table scan on program table
brian_scully at excite.com
Sun Sep 5 12:12:02 EDT 2004
First of all, thanks to Isaac and the mythtv community for making such a great application. It's fundamentally changed the way I watch TV ... for the better.
DISCLAIMER: I am not a Database or MySQL expert. This solution works for me, YMMV.
I have been having lots of trouble lately with the frontend timing out the socket connection to the backend because it thinks that the backend dies. This happens (almost) any time I pull up the program guide or go into channel browse mode. I turned on mysql slow query logging, and did explain plans on the queries there. The following query takes ~13 sec on my machine:
SELECT starttime,endtime,title,subtitle,description,category,callsign,icon,channel.chanid, seriesid, programid
WHERE channel.channum = "501"
AND starttime < 20040905105650
AND endtime > 20040905105650
AND program.chanid = channel.chanid
AND channel.sourceid = cardinput.sourceid
AND cardinput.cardid = capturecard.cardid
AND capturecard.cardid = "1"
AND capturecard.hostname = "htpc";
The explain plan tells me that it is doing a full table scan on the program table (~94k records) for this query. An index including chanid, starttime, and endtime is necessary. There are two indexes that are close: the primary key(chanid, starttime), and an index on endtime - but unfortunately mysql only uses one index for a query.
So I added an index called "program_guide" including the three necessary columns, although perhaps the mythtv maintainers would prefer to add endtime to the primary key.
ALTER TABLE program ADD INDEX program_guide (chanid,starttime,endtime);
With this change, the table scan has moved to channel - but there's only 340 records in that table so there's not much of a performance hit. My queries have gone from 13s to << 1s.
Join Excite! - http://www.excite.com
The most personalized portal on the Web!
More information about the mythtv-users