Optimize the indexes on the files table to speed up select queries
This commit is contained in:
parent
12b46ad94d
commit
5cb06980e3
36
src/db.c
36
src/db.c
|
@ -4468,7 +4468,7 @@ db_perthread_deinit(void)
|
||||||
"CREATE INDEX IF NOT EXISTS idx_sari ON files(songartistid);"
|
"CREATE INDEX IF NOT EXISTS idx_sari ON files(songartistid);"
|
||||||
|
|
||||||
#define I_SONGALBUMID \
|
#define I_SONGALBUMID \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_sali ON files(songalbumid);"
|
"CREATE INDEX IF NOT EXISTS idx_sali ON files(songalbumid, disabled, media_kind, album_sort, disc, track);"
|
||||||
|
|
||||||
#define I_STATEMKINDSARI \
|
#define I_STATEMKINDSARI \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_state_mkind_sari ON files(disabled, media_kind, songartistid);"
|
"CREATE INDEX IF NOT EXISTS idx_state_mkind_sari ON files(disabled, media_kind, songartistid);"
|
||||||
|
@ -4486,7 +4486,7 @@ db_perthread_deinit(void)
|
||||||
"CREATE INDEX IF NOT EXISTS idx_composer ON files(composer, composer_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_composer ON files(composer, composer_sort);"
|
||||||
|
|
||||||
#define I_TITLE \
|
#define I_TITLE \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_title ON files(title, title_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_title ON files(disabled, media_kind, title_sort, data_kind);"
|
||||||
|
|
||||||
#define I_ALBUM \
|
#define I_ALBUM \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_album ON files(album, album_sort);"
|
"CREATE INDEX IF NOT EXISTS idx_album ON files(album, album_sort);"
|
||||||
|
@ -5610,6 +5610,18 @@ db_upgrade_v15(void)
|
||||||
#define U_V16_CREATE_IDX \
|
#define U_V16_CREATE_IDX \
|
||||||
"CREATE INDEX IF NOT EXISTS idx_grp_type_name ON groups(type, name);"
|
"CREATE INDEX IF NOT EXISTS idx_grp_type_name ON groups(type, name);"
|
||||||
|
|
||||||
|
#define U_V16_DROP_IDX_TITLE \
|
||||||
|
"DROP INDEX idx_title;"
|
||||||
|
|
||||||
|
#define U_V16_CREATE_IDX_TITLE \
|
||||||
|
"CREATE INDEX IF NOT EXISTS idx_title ON files(disabled, media_kind, title_sort, data_kind);"
|
||||||
|
|
||||||
|
#define U_V16_DROP_IDX_SONGALBUMID \
|
||||||
|
"DROP INDEX idx_sali;"
|
||||||
|
|
||||||
|
#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_SCVER \
|
#define U_V16_SCVER \
|
||||||
"UPDATE admin SET value = '16' WHERE key = 'schema_version';"
|
"UPDATE admin SET value = '16' WHERE key = 'schema_version';"
|
||||||
|
|
||||||
|
@ -5621,6 +5633,10 @@ static const struct db_init_query db_upgrade_v16_queries[] =
|
||||||
{ U_V16_DROP_TBL_GROUPS, "drop table groups" },
|
{ U_V16_DROP_TBL_GROUPS, "drop table groups" },
|
||||||
{ U_V16_CREATE_TBL_GROUPS, "create table groups" },
|
{ U_V16_CREATE_TBL_GROUPS, "create table groups" },
|
||||||
{ U_V16_CREATE_IDX, "create index type/name" },
|
{ U_V16_CREATE_IDX, "create index type/name" },
|
||||||
|
{ U_V16_DROP_IDX_TITLE, "drop index title on files" },
|
||||||
|
{ 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_SCVER, "set schema_version to 16" },
|
{ U_V16_SCVER, "set schema_version to 16" },
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -5782,6 +5798,14 @@ db_check_version(void)
|
||||||
{
|
{
|
||||||
DPRINTF(E_LOG, L_DB, "Database schema outdated, schema upgrade needed v%d -> v%d\n", cur_ver, SCHEMA_VERSION);
|
DPRINTF(E_LOG, L_DB, "Database schema outdated, schema upgrade needed v%d -> v%d\n", cur_ver, SCHEMA_VERSION);
|
||||||
|
|
||||||
|
ret = sqlite3_exec(hdl, "BEGIN TRANSACTION;", NULL, NULL, &errmsg);
|
||||||
|
if (ret != SQLITE_OK)
|
||||||
|
{
|
||||||
|
DPRINTF(E_LOG, L_DB, "Error starting transaction: %s\n", errmsg);
|
||||||
|
sqlite3_free(errmsg);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
switch (cur_ver)
|
switch (cur_ver)
|
||||||
{
|
{
|
||||||
case 10:
|
case 10:
|
||||||
|
@ -5849,6 +5873,14 @@ db_check_version(void)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = sqlite3_exec(hdl, "END TRANSACTION;", NULL, NULL, &errmsg);
|
||||||
|
if (ret != SQLITE_OK)
|
||||||
|
{
|
||||||
|
DPRINTF(E_LOG, L_DB, "Error ending transaction: %s\n", errmsg);
|
||||||
|
sqlite3_free(errmsg);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
/* What about some housekeeping work, eh? */
|
/* What about some housekeeping work, eh? */
|
||||||
DPRINTF(E_INFO, L_DB, "Now vacuuming database, this may take some time...\n");
|
DPRINTF(E_INFO, L_DB, "Now vacuuming database, this may take some time...\n");
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue