| Linha de Produto: | Franquias e Redes |
|---|---|
| Segmento: | Varejo |
| Módulo: | Server |
| Função: | Relatórios de Promoções |
| Ticket: | |
| Requisito/Story/Issue (informe o requisito relacionado) : | DVARLIVECP-7810 |
Criação de um índice na tabela vigencia para otimizar o ORDER BY utilizado no Relatório de Promoções Encerradas.
Atualmente, o relatório de promoções encerradas realiza ordenação pelos campos filial.id, vigencia.inicio e vigencia.fim. Foi identificado via análise de plano de execução que o SQL Server realiza operação de Sort explícito, elevando o custo da consulta.
Criar um índice que permita ao otimizador utilizar Index Seek e evitar o uso de Sort, melhorando a performance da consulta.
Cláusula de ordenação da query:
ORDER BY filial.id ASC, vigencia.inicio ASC, vigencia.fim ASC
Tabela afetada: vigencia
Problema identificado:
O plano de execução mostra operação de Sort com custo elevado (~22–25%).
A ausência de índice adequado impede o uso de Index Seek.
Criar os seguintes índices não clusterizados:
CREATE NONCLUSTERED INDEX IX_Vigencia_Inicio_Fim ON vigencia (inicio ASC, fim ASC);
CREATE NONCLUSTERED INDEX IDX_situacao_promocao_status_data
ON situacao_promocao (statusPromocao, dataEncerramento)
INCLUDE (filial_id, promocao_id);
O índice IX_Vigencia_Inicio_Fim foi criado com sucesso.
O plano de execução da query não contém mais operação de Sort.
O acesso à tabela vigencia passa a utilizar Index Seek.
Melhoria de performance confirmada com tempo de execução e IO lógico reduzidos.
Ganho direto de performance em relatórios analíticos.
Pequeno aumento no custo de manutenção DML em vigencia.
Baixo risco de impacto funcional.
Índice pode ser revisado e ajustado após testes em ambiente de homologação.
Banco de Dados
Relatórios / BI
Performance