Hi,

I am trying to port some software (muggle media browser,
see http://www.htpc-tech.de/htpc/muggle.htm) to sqlite.

This query returns at once with mysql:
mysql> SELECT album.title,COUNT(*) AS mgcount FROM album,tracks WHERE 
tracks.folder1='ja' AND tracks.folder2='NeilDiamond' AND tracks.folder3='' AND 
tracks.folder4='' AND tracks.sourceid=album.cddbid GROUP BY album.title ORDER 
BY mgcount desc,album.title;
+----------------------------+---------+
| title                      | mgcount |
+----------------------------+---------+
| Unassigned                 |      52 |
| Classics - The Early Years |       6 |
| His Very Best              |       3 |
+----------------------------+---------+
3 rows in set (0.00 sec)

but it takes about 10 seconds with sqlite.

This one still takes about 10 seconds:
sqlite> SELECT album.title FROM album,tracks WHERE tracks.folder1='ja' AND 
tracks.folder2='NeilDiamond' ANDtracks.folder3='' AND tracks.folder4='' AND 
tracks.sourceid=album.cddbid; 
But if I remove the last 2 WHERE clauses, it takes about 1 second - still 
rather much:
sqlite> SELECT album.title FROM album,tracks WHERE tracks.folder1='ja' AND 
tracks.folder2='NeilDiamond' ANDtracks.sourceid=album.cddbid GROUP BY 
album.title;

How can I speed this up? How can I check how sqlite optimizes this query?
I am using the debian unstable packages.

sqlite> select count(*) from tracks;
2631
sqlite> select count(*) from album;
657

the schema:
  "CREATE TABLE album ( "
          "artist varchar(255) default NULL, "
          "title varchar(255) default NULL, "
          "cddbid varchar(20) NOT NULL default '', "
          "coverimg varchar(255) default NULL, "
          "covertxt mediumtext, "
          "modified date default NULL, "
          "genre varchar(10) default NULL, "
          "PRIMARY KEY  (cddbid))",

  "CREATE TABLE tracks ( "
          "artist varchar(255) default NULL, "
          "title varchar(255) default NULL, "
          "genre1 varchar(10) default NULL, "
          "genre2 varchar(10) default NULL, "
          "year smallint(5) default NULL, "
          "lang varchar(4) default NULL, "
          "type tinyint(3) default NULL, "
          "rating tinyint(3) default NULL, "
          "length smallint(5) default NULL, "
          "source tinyint(3) default NULL, "
          "sourceid varchar(20) default NULL, "
          "tracknb tinyint(3) default NULL, "
          "mp3file varchar(255) default NULL, "
          "condition tinyint(3) default NULL, "
          "voladjust smallint(6) default '0', "
          "lengthfrm mediumint(9) default '0', "
          "startfrm mediumint(9) default '0', "
          "bpm smallint(6) default '0', "
          "lyrics mediumtext, "
          "bitrate varchar(10) default NULL, "
          "created date default NULL, "
          "modified date default NULL, "
          "backup tinyint(3) default NULL, "
          "samplerate int(7) default NULL, "
          "channels   tinyint(3) default NULL,  "
          "id integer PRIMARY KEY autoincrement, "
          "folder1 varchar(255), "
          "folder2 varchar(255), "
          "folder3 varchar(255), "
          "folder4 varchar(255)) ",
  "CREATE INDEX tracks_title on tracks (title)",
  "CREATE INDEX tracks_mp3file on tracks (mp3file)",
  "CREATE INDEX tracks_genre1 on tracks (genre1)",
  "CREATE INDEX tracks_genre2 on tracks (genre2)",
  "CREATE INDEX tracks_year on tracks (year)",
  "CREATE INDEX tracks_lang on tracks (lang)",
  "CREATE INDEX tracks_artist on tracks (artist)",
  "CREATE INDEX tracks_folder1 on tracks (folder1)",
  "CREATE INDEX tracks_folder2 on tracks (folder2)",
  "CREATE INDEX tracks_folder3 on tracks (folder3)",
  "CREATE INDEX tracks_folder4 on tracks (folder4)",

-- 
Wolfgang

Reply via email to