self join to resolve query performance

This commit is contained in:
J. Nick Koston
2023-03-10 12:05:52 -10:00
parent b2eb220ffe
commit 14514e3851
2 changed files with 13 additions and 7 deletions

View File

@@ -111,9 +111,12 @@ def purge_old_data(
_LOGGER.debug("Cleanup filtered data hasn't fully completed yet") _LOGGER.debug("Cleanup filtered data hasn't fully completed yet")
return False return False
_purge_old_recorder_runs(instance, session, purge_before) # This purge cycle is finished, clean up old event types and
# recorder runs
if instance.event_type_manager.active: if instance.event_type_manager.active:
_purge_old_event_types(instance, session) _purge_old_event_types(instance, session)
_purge_old_recorder_runs(instance, session, purge_before)
if repack: if repack:
repack_database(instance) repack_database(instance)
return True return True

View File

@@ -741,12 +741,15 @@ def find_event_types_to_purge() -> StatementLambdaElement:
"""Find event_type_ids to purge.""" """Find event_type_ids to purge."""
return lambda_stmt( return lambda_stmt(
lambda: select(EventTypes.event_type_id, EventTypes.event_type).where( lambda: select(EventTypes.event_type_id, EventTypes.event_type).where(
EventTypes.event_type_id EventTypes.event_type_id.not_in(
== ( select(EventTypes.event_type_id).join(
select(distinct(EventTypes.event_type_id).label("unused_event_type_id")) used_event_type_ids := select(
.filter(EventTypes.event_type_id.not_in(select(Events.event_type_id))) distinct(Events.event_type_id).label("used_event_type_id")
.subquery() ).subquery(),
).c.unused_event_type_id EventTypes.event_type_id
== used_event_type_ids.c.used_event_type_id,
)
)
) )
) )