Speed up searches when one cluster filter is active

This commit is contained in:
emeric
2023-11-03 12:43:56 +01:00
parent 9ff1b215c2
commit 083652e293
5 changed files with 23 additions and 7 deletions
+8 -2
View File
@@ -99,7 +99,8 @@ createQuery(Session& session, const Artist::FindParameters& params)
|| params.writtenAfter.isValid() || params.writtenAfter.isValid()
|| params.linkType || params.linkType
|| params.track.isValid() || params.track.isValid()
|| params.release.isValid()) || params.release.isValid()
|| params.clusters.size() == 1)
{ {
query.join("track t ON t.id = t_a_l.track_id"); query.join("track t ON t.id = t_a_l.track_id");
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id"); query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
@@ -140,7 +141,12 @@ createQuery(Session& session, const Artist::FindParameters& params)
.where("s_a.sync_state <> ?").bind(SyncState::PendingRemove); .where("s_a.sync_state <> ?").bind(SyncState::PendingRemove);
} }
if (!params.clusters.empty()) if(params.clusters.size() == 1)
{
query.join("track_cluster t_c ON t_c.track_id = t.id")
.where("t_c.cluster_id = ?").bind(params.clusters.front());
}
else if (params.clusters.size() > 1)
{ {
std::ostringstream oss; std::ostringstream oss;
oss << "a.id IN (SELECT DISTINCT a.id FROM artist a" oss << "a.id IN (SELECT DISTINCT a.id FROM artist a"
+8 -2
View File
@@ -45,7 +45,8 @@ namespace Database
|| params.sortMethod == ReleaseSortMethod::OriginalDateDesc || params.sortMethod == ReleaseSortMethod::OriginalDateDesc
|| params.writtenAfter.isValid() || params.writtenAfter.isValid()
|| params.dateRange || params.dateRange
|| params.artist.isValid()) || params.artist.isValid()
|| params.clusters.size() == 1)
{ {
query.join("track t ON t.release_id = r.id"); query.join("track t ON t.release_id = r.id");
} }
@@ -120,7 +121,12 @@ namespace Database
} }
} }
if (!params.clusters.empty()) if (params.clusters.size() == 1)
{
query.join("track_cluster t_c ON t_c.track_id = t.id")
.where("t_c.cluster_id = ?").bind(params.clusters.front());
}
else if (params.clusters.size() > 1)
{ {
std::ostringstream oss; std::ostringstream oss;
oss << "r.id IN (SELECT DISTINCT r.id FROM release r" oss << "r.id IN (SELECT DISTINCT r.id FROM release r"
+7 -1
View File
@@ -64,7 +64,13 @@ namespace Database
.where("s_t.sync_state <> ?").bind(SyncState::PendingRemove); .where("s_t.sync_state <> ?").bind(SyncState::PendingRemove);
} }
if (!params.clusters.empty()) if (params.clusters.size() == 1)
{
// optim
query.join("track_cluster t_c ON t_c.track_id = t.id")
.where("t_c.cluster_id = ?").bind(params.clusters.front());
}
else if (params.clusters.size() > 1)
{ {
std::ostringstream oss; std::ostringstream oss;
oss << "t.id IN (SELECT DISTINCT t.id FROM track t" oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
-1
View File
@@ -79,7 +79,6 @@ namespace UserInterface
case Mode::Search: case Mode::Search:
{ {
// do not sort results as we search in both name and sort names, sorting may be very long
Artist::FindParameters params; Artist::FindParameters params;
params.setClusters(getFilters().getClusterIds()); params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
-1
View File
@@ -83,7 +83,6 @@ namespace UserInterface
Release::FindParameters params; Release::FindParameters params;
params.setClusters(getFilters().getClusterIds()); params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords()); params.setKeywords(getSearchKeywords());
params.setSortMethod(ReleaseSortMethod::Name);
params.setRange(range); params.setRange(range);
{ {