mirror of
https://github.com/home-assistant/core.git
synced 2025-08-08 07:05:07 +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")
|
_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
|
||||||
|
@@ -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.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
|
EventTypes.event_type_id
|
||||||
== (
|
== used_event_type_ids.c.used_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
|
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user