mirror of
https://github.com/home-assistant/core.git
synced 2025-08-07 22:55:10 +02:00
self join to resolve query performance
This commit is contained in:
@@ -111,9 +111,12 @@ def purge_old_data(
|
||||
_LOGGER.debug("Cleanup filtered data hasn't fully completed yet")
|
||||
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:
|
||||
_purge_old_event_types(instance, session)
|
||||
|
||||
_purge_old_recorder_runs(instance, session, purge_before)
|
||||
if repack:
|
||||
repack_database(instance)
|
||||
return True
|
||||
|
@@ -741,12 +741,15 @@ def find_event_types_to_purge() -> StatementLambdaElement:
|
||||
"""Find event_type_ids to purge."""
|
||||
return lambda_stmt(
|
||||
lambda: select(EventTypes.event_type_id, EventTypes.event_type).where(
|
||||
EventTypes.event_type_id
|
||||
== (
|
||||
select(distinct(EventTypes.event_type_id).label("unused_event_type_id"))
|
||||
.filter(EventTypes.event_type_id.not_in(select(Events.event_type_id)))
|
||||
.subquery()
|
||||
).c.unused_event_type_id
|
||||
EventTypes.event_type_id.not_in(
|
||||
select(EventTypes.event_type_id).join(
|
||||
used_event_type_ids := select(
|
||||
distinct(Events.event_type_id).label("used_event_type_id")
|
||||
).subquery(),
|
||||
EventTypes.event_type_id
|
||||
== used_event_type_ids.c.used_event_type_id,
|
||||
)
|
||||
)
|
||||
)
|
||||
)
|
||||
|
||||
|
Reference in New Issue
Block a user