diff --git a/frigate/api/event.py b/frigate/api/event.py index 2268629c1c..80f3ab72dc 100644 --- a/frigate/api/event.py +++ b/frigate/api/event.py @@ -411,22 +411,20 @@ def events_explore( ) # Single query: per-label COUNT and top-N ranking by start_time computed - # via window functions in a CTE, then filtered to rn <= limit. Replaces - # the previous loop that issued 2 queries per distinct label. - event_count = ( - fn.COUNT(Event.id).over(partition_by=[Event.label]).alias("event_count") - ) - rn = ( - fn.ROW_NUMBER() - .over(partition_by=[Event.label], order_by=[Event.start_time.desc()]) - .alias("rn") - ) + # via window functions in a CTE, then filtered to rn <= limit + event_count = fn.COUNT(Event.id).over(partition_by=[Event.label]).alias("event_count") + rn = fn.ROW_NUMBER().over( + partition_by=[Event.label], order_by=[Event.start_time.desc()] + ).alias("rn") - base_query = Event.select( - *explore_columns, - event_count, - rn, - ).where(Event.camera << allowed_cameras) + base_query = ( + Event.select( + *explore_columns, + event_count, + rn, + ) + .where(Event.camera << allowed_cameras) + ) ranked = base_query.cte("ranked") query = ( Event.select( @@ -484,7 +482,9 @@ def events_explore( "false_positive": event.false_positive, "box": event.box, "data": { - k: v for k, v in (event.data or {}).items() if k in allowed_data_keys + k: v + for k, v in (event.data or {}).items() + if k in allowed_data_keys }, "event_count": event.event_count, } diff --git a/migrations/036_add_perf_indexes.py b/migrations/036_add_perf_indexes.py index 3796aa6acf..5354e5c09f 100644 --- a/migrations/036_add_perf_indexes.py +++ b/migrations/036_add_perf_indexes.py @@ -21,17 +21,7 @@ def migrate(migrator, database, fake=False, **kwargs): 'CREATE INDEX IF NOT EXISTS "event_camera_start_time" ' 'ON "event" ("camera", "start_time" DESC)' ) - migrator.sql( - 'CREATE INDEX IF NOT EXISTS "reviewsegment_camera_start_time" ' - 'ON "reviewsegment" ("camera", "start_time" DESC)' - ) - migrator.sql( - 'CREATE INDEX IF NOT EXISTS "reviewsegment_end_time" ' - 'ON "reviewsegment" ("end_time")' - ) def rollback(migrator, database, fake=False, **kwargs): migrator.sql('DROP INDEX IF EXISTS "event_camera_start_time"') - migrator.sql('DROP INDEX IF EXISTS "reviewsegment_camera_start_time"') - migrator.sql('DROP INDEX IF EXISTS "reviewsegment_end_time"')