optimize queries and indexes for composer/genre

This commit is contained in:
chme 2014-12-28 10:10:40 +01:00
parent 5cb06980e3
commit ec47c6e730

View File

@ -1450,17 +1450,17 @@ db_build_query_browse(struct query_params *qp, char *field, char *sort_field, ch
}
if (idx && qp->filter)
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" AND %s %s %s;", field, sort_field, field, qp->filter, sort, idx);
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" AND %s GROUP BY f.%s %s %s;", field, sort_field, field, qp->filter, field, sort, idx);
else if (idx)
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" %s %s;", field, sort_field, field, sort, idx);
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" GROUP BY f.%s %s %s;", field, sort_field, field, field, sort, idx);
else if (qp->filter)
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" AND %s %s;", field, sort_field, field, qp->filter, sort);
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != ''"
" AND %s GROUP BY f.%s %s;", field, sort_field, field, qp->filter, field, sort);
else
query = sqlite3_mprintf("SELECT DISTINCT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != '' %s",
field, sort_field, field, sort);
query = sqlite3_mprintf("SELECT f.%s, f.%s FROM files f WHERE f.disabled = 0 AND f.%s != '' GROUP BY f.%s %s",
field, sort_field, field, field, sort);
free(sort);
@ -4483,7 +4483,10 @@ db_perthread_deinit(void)
"CREATE INDEX IF NOT EXISTS idx_albumartist ON files(album_artist, album_artist_sort);"
#define I_COMPOSER \
"CREATE INDEX IF NOT EXISTS idx_composer ON files(composer, composer_sort);"
"CREATE INDEX IF NOT EXISTS idx_composer ON files(disabled, media_kind, composer, data_kind);"
#define I_GENRE \
"CREATE INDEX IF NOT EXISTS idx_genre ON files(disabled, media_kind, genre, data_kind);"
#define I_TITLE \
"CREATE INDEX IF NOT EXISTS idx_title ON files(disabled, media_kind, title_sort, data_kind);"
@ -4569,6 +4572,7 @@ static const struct db_init_query db_init_queries[] =
{ I_ARTIST, "create artist index" },
{ I_ALBUMARTIST, "create album_artist index" },
{ I_COMPOSER, "create composer index" },
{ I_GENRE, "create genre index" },
{ I_TITLE, "create title index" },
{ I_ALBUM, "create album index" },
@ -5622,6 +5626,15 @@ db_upgrade_v15(void)
#define U_V16_CREATE_IDX_SONGALBUMID \
"CREATE INDEX IF NOT EXISTS idx_sali ON files(songalbumid, disabled, media_kind, album_sort, disc, track);"
#define U_V16_CREATE_IDX_GENRE \
"CREATE INDEX IF NOT EXISTS idx_genre ON files(disabled, media_kind, genre, data_kind);"
#define U_V16_DROP_IDX_COMPOSER \
"DROP INDEX idx_composer;"
#define U_V16_CREATE_IDX_COMPOSER \
"CREATE INDEX IF NOT EXISTS idx_composer ON files(disabled, media_kind, composer, data_kind);"
#define U_V16_SCVER \
"UPDATE admin SET value = '16' WHERE key = 'schema_version';"
@ -5637,6 +5650,9 @@ static const struct db_init_query db_upgrade_v16_queries[] =
{ U_V16_CREATE_IDX_TITLE, "create index title on files" },
{ U_V16_DROP_IDX_SONGALBUMID, "drop index songalbumid on files" },
{ U_V16_CREATE_IDX_SONGALBUMID, "create index songalbumid on files" },
{ U_V16_CREATE_IDX_GENRE, "create index genre on files" },
{ U_V16_DROP_IDX_COMPOSER, "drop index composer on files" },
{ U_V16_CREATE_IDX_COMPOSER, "create index composer on files" },
{ U_V16_SCVER, "set schema_version to 16" },
};