mirror of
https://github.com/Freika/dawarich.git
synced 2026-01-09 08:47:11 -05:00
2.7 KiB
2.7 KiB
Database Index Audit (2025-10-05)
Observed ActiveRecord Query Patterns
- Visits range filter –
log/test.log:91056shows repeated lookups withWHERE "visits"."user_id" = ? AND (started_at >= ? AND ended_at <= ?)ordered bystarted_at. - Imports deduplication checks –
log/test.log:11130runsSELECT 1 FROM "imports" WHERE "name" = ? AND "user_id" = ?(and variants excluding anid). - Family invitations association –
app/models/user.rb:22loadssent_family_invitations, which issues queries oninvited_by_ideven though onlyfamily_idcurrently has an index (db/schema.rb:108-120).
Missing or Weak Index Coverage
-
family_invitations(invited_by_id)- Evidence: association in
app/models/user.rb:22plus schema definition atdb/schema.rb:112lacking an index. - Risk: every
user.sent_family_invitationscall scans byinvited_by_id, which will degrade as invitation counts grow. - Suggested fix: add
add_index :family_invitations, :invited_by_id(considervalidate: falsefirst, thenvalidate_foreign_keyto avoid locking).
- Evidence: association in
-
visits(user_id, started_at, ended_at)- Evidence: range queries in
log/test.log:91056rely onuser_idplusstarted_at/ended_at, yet the table only has single-column indexes onuser_idandstarted_at(db/schema.rb:338-339). - Risk: planner must combine two indexes or fall back to seq scans for wide ranges.
- Suggested fix: add a composite index such as
add_index :visits, [:user_id, :started_at, :ended_at](or at minimum[:user_id, :started_at]) to cover the filter and ordering.
- Evidence: range queries in
-
imports(user_id, name)- Evidence: deduplication queries in
log/test.log:11130filter on both columns while onlyuser_idis indexed (db/schema.rb:146-148). - Risk: duplicate checks for large import histories become progressively slower.
- Suggested fix: add a unique composite index
add_index :imports, [:user_id, :name], unique: trueif business rules prevent duplicate filenames per user.
- Evidence: deduplication queries in
Potentially Unused Indexes
active_storage_attachments.blob_id(db/schema.rb:34) andactive_storage_variant_records(blob_id, variation_digest)(db/schema.rb:53) do not appear in application code outside Active Storage internals. They are required for Active Storage itself, so no action recommended beyond periodic verification withANALYZEstats.
Next Steps
- Generate and run migrations for the suggested indexes in development, then
EXPLAIN ANALYZEthe affected queries to confirm improved plans. - After deploying, monitor
pg_stat_statementsor query logs to ensure the new indexes are used and to detect any remaining hotspots.