- Introduced a new SQL migration file to create various performance indexes on tasks, task_assignees, task_phase, and related tables. - These indexes aim to enhance query performance for task filtering, status joins, assignees lookup, and other operations, improving overall application efficiency.
82 lines
2.7 KiB
SQL
82 lines
2.7 KiB
SQL
-- Performance indexes for optimized tasks queries
|
|
-- Migration: 20250115000000-performance-indexes.sql
|
|
|
|
-- Composite index for main task filtering
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_project_archived_parent
|
|
ON tasks(project_id, archived, parent_task_id)
|
|
WHERE archived = FALSE;
|
|
|
|
-- Index for status joins
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_status_project
|
|
ON tasks(status_id, project_id)
|
|
WHERE archived = FALSE;
|
|
|
|
-- Index for assignees lookup
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_assignees_task_member
|
|
ON tasks_assignees(task_id, team_member_id);
|
|
|
|
-- Index for phase lookup
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_phase_task_phase
|
|
ON task_phase(task_id, phase_id);
|
|
|
|
-- Index for subtask counting
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_parent_archived
|
|
ON tasks(parent_task_id, archived)
|
|
WHERE parent_task_id IS NOT NULL AND archived = FALSE;
|
|
|
|
-- Index for labels
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_labels_task_label
|
|
ON task_labels(task_id, label_id);
|
|
|
|
-- Index for comments count
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_comments_task
|
|
ON task_comments(task_id);
|
|
|
|
-- Index for attachments count
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_attachments_task
|
|
ON task_attachments(task_id);
|
|
|
|
-- Index for work log aggregation
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_work_log_task
|
|
ON task_work_log(task_id);
|
|
|
|
-- Index for subscribers check
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_subscribers_task
|
|
ON task_subscribers(task_id);
|
|
|
|
-- Index for dependencies check
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_dependencies_task
|
|
ON task_dependencies(task_id);
|
|
|
|
-- Index for timers lookup
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_timers_task_user
|
|
ON task_timers(task_id, user_id);
|
|
|
|
-- Index for custom columns
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_cc_column_values_task
|
|
ON cc_column_values(task_id);
|
|
|
|
-- Index for team member info view optimization
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_team_members_team_user
|
|
ON team_members(team_id, user_id)
|
|
WHERE active = TRUE;
|
|
|
|
-- Index for notification settings
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_notification_settings_user_team
|
|
ON notification_settings(user_id, team_id);
|
|
|
|
-- Index for task status categories
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_statuses_category
|
|
ON task_statuses(category_id, project_id);
|
|
|
|
-- Index for project phases
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_project_phases_project_sort
|
|
ON project_phases(project_id, sort_index);
|
|
|
|
-- Index for task priorities
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_task_priorities_value
|
|
ON task_priorities(value);
|
|
|
|
-- Index for team labels
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_team_labels_team
|
|
ON team_labels(team_id); |