Class: AddAnalyticsPerformanceIndexes
- Inherits:
-
Object
- Object
- AddAnalyticsPerformanceIndexes
- Defined in:
- lib/generators/ruby_cms/templates/db/migrate/20260409000001_add_analytics_performance_indexes.rb
Overview
Performance indexes for RubyCMS analytics queries.
Without these, every analytics page load does a full table scan on ahoy_events and ahoy_visits for the date range.
Impact per index:
ahoy_events (name, time) — primary filter for page_view_events + conversion_events
ahoy_events (visit_id, time) — exit pages subquery: MAX(time) per visit
ahoy_visits (started_at) — primary filter for visits scope
ahoy_visits (visitor_token) — new-visitor NOT IN subquery
Instance Method Summary collapse
Instance Method Details
#change ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
# File 'lib/generators/ruby_cms/templates/db/migrate/20260409000001_add_analytics_performance_indexes.rb', line 14 def change return unless table_exists?(:ahoy_events) && table_exists?(:ahoy_visits) # Most critical: all page_view_events / conversion_events queries filter on (name, time) add_index :ahoy_events, %i[name time], if_not_exists: true # Exit pages subquery groups by visit_id and picks MAX(time) add_index :ahoy_events, %i[visit_id time], if_not_exists: true # All visits queries filter on started_at range add_index :ahoy_visits, :started_at, if_not_exists: true # New-visitor percentage: NOT IN (SELECT visitor_token WHERE started_at < ?) add_index :ahoy_visits, :visitor_token, if_not_exists: true end |