Merge remote-tracking branch 'performance_optimize-search-queries/performance/optimize-search-queries' into Develop

Updated Requirements
This commit is contained in:
Ozzie Isaacs
2025-12-05 16:34:14 +01:00
parent d2015dd998
commit fceca5cc08
5 changed files with 333 additions and 1884 deletions

View File

@@ -999,7 +999,6 @@ class CalibreDB:
# Apply eager loading for authors to avoid N+1 queries
base_query = base_query.options(selectinload(Books.authors))
if len(join) == 6:
base_query = base_query.outerjoin(join[0], join[1]).outerjoin(join[2]).outerjoin(join[3], join[4]).outerjoin(join[5])
@@ -1015,7 +1014,7 @@ class CalibreDB:
return base_query.filter(Books.id.in_(fts_ids))
# Fallback to traditional search with optimized subqueries
q = list()
# q = list()
author_terms = re.split("[, ]+", term)
# Use subquery for authors to avoid expensive .any() with OR
@@ -1026,7 +1025,7 @@ class CalibreDB:
for author_term in author_terms:
author_filters.append(func.lower(Authors.name).ilike("%" + author_term + "%"))
if author_filters:
author_subquery = author_subquery.filter(or_(*author_filters))
author_subquery = author_subquery.filter(and_(*author_filters))
# Build optimized filter expressions
cc = self.get_cc_columns(config, filter_config_custom_read=True)