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.linkType
|| 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_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);
}
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;
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.writtenAfter.isValid()
|| params.dateRange
|| params.artist.isValid())
|| params.artist.isValid()
|| params.clusters.size() == 1)
{
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;
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);
}
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;
oss << "t.id IN (SELECT DISTINCT t.id FROM track t"
-1
View File
@@ -79,7 +79,6 @@ namespace UserInterface
case Mode::Search:
{
// do not sort results as we search in both name and sort names, sorting may be very long
Artist::FindParameters params;
params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords());
-1
View File
@@ -83,7 +83,6 @@ namespace UserInterface
Release::FindParameters params;
params.setClusters(getFilters().getClusterIds());
params.setKeywords(getSearchKeywords());
params.setSortMethod(ReleaseSortMethod::Name);
params.setRange(range);
{