47 lines
2.6 KiB
SQL
47 lines
2.6 KiB
SQL
-- Migration 017: Additional indexes and constraints
|
|
-- Performance optimizations for common query patterns
|
|
|
|
-- Composite indexes for dashboard queries
|
|
CREATE INDEX idx_services_address_date ON services(account_address_id, date);
|
|
CREATE INDEX idx_projects_customer_date ON projects(customer_id, date);
|
|
|
|
-- For finding active work by team member
|
|
CREATE INDEX idx_service_team_date ON service_team_members(team_profile_id);
|
|
CREATE INDEX idx_project_team_date ON project_team_members(team_profile_id);
|
|
|
|
-- For task completion tracking
|
|
CREATE INDEX idx_service_task_completions_year_month ON service_task_completions(year, month);
|
|
CREATE INDEX idx_service_task_completions_completed_at ON service_task_completions(completed_at DESC);
|
|
CREATE INDEX idx_project_task_completions_completed_at ON project_task_completions(completed_at DESC);
|
|
|
|
-- For session media queries
|
|
CREATE INDEX idx_service_session_images_internal ON service_session_images(internal);
|
|
CREATE INDEX idx_service_session_videos_internal ON service_session_videos(internal);
|
|
CREATE INDEX idx_project_session_images_internal ON project_session_images(internal);
|
|
CREATE INDEX idx_project_session_videos_internal ON project_session_videos(internal);
|
|
|
|
-- For financial reporting
|
|
CREATE INDEX idx_invoices_date_status ON invoices(date, status);
|
|
CREATE INDEX idx_labor_start_date ON labor(start_date);
|
|
CREATE INDEX idx_revenues_start_date ON revenues(start_date);
|
|
|
|
-- For scope hierarchy traversal
|
|
CREATE INDEX idx_scope_template_areas_order ON scope_template_areas(template_id, "order");
|
|
CREATE INDEX idx_scope_template_tasks_order ON scope_template_tasks(area_id, "order");
|
|
CREATE INDEX idx_service_scope_areas_order ON service_scope_areas(scope_id, "order");
|
|
CREATE INDEX idx_service_scope_tasks_order ON service_scope_tasks(area_id, "order");
|
|
CREATE INDEX idx_project_scope_categories_order ON project_scope_categories(scope_id, "order");
|
|
CREATE INDEX idx_project_scope_tasks_order ON project_scope_tasks(category_id, "order");
|
|
|
|
-- For conversation/message pagination
|
|
CREATE INDEX idx_messages_conversation_created ON messages(conversation_id, created_at DESC);
|
|
|
|
-- For notification delivery retry logic
|
|
CREATE INDEX idx_notification_deliveries_pending ON notification_deliveries(status, last_attempt_at)
|
|
WHERE status IN ('PENDING', 'QUEUED', 'FAILED');
|
|
|
|
-- Partial indexes for active records
|
|
CREATE INDEX idx_accounts_active ON accounts(customer_id) WHERE status = 'ACTIVE';
|
|
CREATE INDEX idx_team_profiles_active ON team_profiles(role) WHERE status = 'ACTIVE';
|
|
CREATE INDEX idx_customer_profiles_active ON customer_profiles(id) WHERE status = 'ACTIVE';
|