94 lines
5.7 KiB
SQL
94 lines
5.7 KiB
SQL
-- Fase 2: Índices Estratégicos para Performance
|
|
-- Identificados através da análise dos hooks principais
|
|
|
|
-- Índices para queries frequentes em peças
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_of_number ON pecas(of_number);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_marca ON pecas(marca);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_user_id ON pecas(user_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_created_at ON pecas(created_at DESC);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_prioridade ON pecas(prioridade);
|
|
|
|
-- Índices para componentes de peças
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_componentes_peca_peca_id ON componentes_peca(peca_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_componentes_marca ON componentes_peca(marca_componente);
|
|
|
|
-- Índices para apontamentos de produção (queries críticas)
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_of_number ON apontamentos_producao(of_number);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_processo_id ON apontamentos_producao(processo_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_peca_id ON apontamentos_producao(peca_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_componente_id ON apontamentos_producao(componente_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_data ON apontamentos_producao(data_apontamento DESC);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_created_by ON apontamentos_producao(created_by);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_tipo ON apontamentos_producao(tipo_apontamento);
|
|
|
|
-- Índice composto para busca de quantidade processada (query frequente)
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_busca_quantidade
|
|
ON apontamentos_producao(processo_id, of_number, tipo_apontamento, peca_id, componente_id);
|
|
|
|
-- Índices para estoque (queries pesadas)
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_estoque_codigo ON estoque_materiais(codigo);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_estoque_status ON estoque_materiais(status);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_estoque_tipo_material ON estoque_materiais(tipo_material_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_estoque_localizacao ON estoque_materiais(localizacao);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_estoque_fornecedor ON estoque_materiais(fornecedor);
|
|
|
|
-- Índices para movimentações de estoque
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_movimentacoes_material_id ON movimentacoes_estoque(material_id);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_movimentacoes_data ON movimentacoes_estoque(data_movimentacao DESC);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_movimentacoes_tipo ON movimentacoes_estoque(tipo_movimentacao);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_movimentacoes_created_at ON movimentacoes_estoque(created_at DESC);
|
|
|
|
-- Índices para tasks (performance crítica)
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_is_completed ON tasks(is_completed);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_assigned_to ON tasks(assigned_to);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_created_by ON tasks(created_by);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_completed_by ON tasks(completed_by);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_due_date ON tasks(due_date);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_completed_at ON tasks(completed_at DESC);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_priority ON tasks(priority);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_status ON tasks(status);
|
|
|
|
-- Índice composto para tasks ativas ordenadas por prioridade e prazo
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_active_priority
|
|
ON tasks(is_completed, priority, due_date) WHERE is_completed = false;
|
|
|
|
-- Índice composto para tasks concluídas recentes
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_tasks_completed_recent
|
|
ON tasks(is_completed, completed_at DESC) WHERE is_completed = true;
|
|
|
|
-- Índices para ordens de fabricação
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_of_num_of ON ordens_fabricacao(num_of);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_of_status ON ordens_fabricacao(status);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_of_data_prazo ON ordens_fabricacao(data_prazo);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_of_gestor ON ordens_fabricacao(gestor);
|
|
|
|
-- Índices para ficha técnica
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_ficha_tecnica_of_number ON ficha_tecnica_contratos(of_number);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_ficha_tecnica_cliente ON ficha_tecnica_contratos(cliente);
|
|
|
|
-- Índices para processos de fabricação
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_processos_ativo ON processos_fabricacao(ativo);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_processos_ordem ON processos_fabricacao(ordem);
|
|
|
|
-- Índices para profiles (autenticação e autorização)
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_profiles_email ON profiles(email);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_profiles_status ON profiles(status);
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_profiles_privilege_id ON profiles(privilege_id);
|
|
|
|
-- Índices para melhor performance de join entre apontamentos e processos
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_apontamentos_join_processo
|
|
ON apontamentos_producao(processo_id, data_apontamento DESC);
|
|
|
|
-- Índices para melhor performance de join entre peças e componentes
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_pecas_join_componentes
|
|
ON pecas(id, tem_componentes) WHERE tem_componentes = true;
|
|
|
|
-- Estatísticas para melhor planejamento de queries
|
|
ANALYZE pecas;
|
|
ANALYZE componentes_peca;
|
|
ANALYZE apontamentos_producao;
|
|
ANALYZE estoque_materiais;
|
|
ANALYZE movimentacoes_estoque;
|
|
ANALYZE tasks;
|
|
ANALYZE ordens_fabricacao;
|
|
ANALYZE processos_fabricacao; |