Optimized queries to iterate over artists/releases, when specifying a media library
This commit is contained in:
@@ -196,10 +196,8 @@ namespace lms::db
|
|||||||
|
|
||||||
if (library.isValid())
|
if (library.isValid())
|
||||||
{
|
{
|
||||||
query.join("track t ON t.id = t_a_l.track_id");
|
// Faster than using joins
|
||||||
query.join("track_artist_link t_a_l ON t_a_l.artist_id = a.id");
|
query.where("EXISTS (SELECT 1 FROM track_artist_link t_a_l JOIN track t ON t.id = t_a_l.track_id WHERE t_a_l.artist_id = a.id AND t.media_library_id = ?)").bind(library);
|
||||||
query.where("t.media_library_id = ?").bind(library);
|
|
||||||
query.groupBy("a.id");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::forEachQueryResult(query, [&](const Artist::pointer& artist)
|
utils::forEachQueryResult(query, [&](const Artist::pointer& artist)
|
||||||
|
|||||||
@@ -294,9 +294,8 @@ namespace lms::db
|
|||||||
|
|
||||||
if (library.isValid())
|
if (library.isValid())
|
||||||
{
|
{
|
||||||
query.join("track t ON t.release_id = r.id");
|
// Faster than using joins
|
||||||
query.where("t.media_library_id = ?").bind(library);
|
query.where("EXISTS (SELECT 1 FROM track t WHERE t.release_id = r.id AND t.media_library_id = ?)").bind(library);
|
||||||
query.groupBy("r.id");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
utils::forEachQueryResult(query, [&](const Release::pointer& release)
|
utils::forEachQueryResult(query, [&](const Release::pointer& release)
|
||||||
|
|||||||
Reference in New Issue
Block a user