Estou usando a seguinte consulta para encontrar índices não utilizados:
SELECT
PSUI.indexrelid::regclass AS IndexName
,PSUI.relid::regclass AS TableName
FROM pg_stat_user_indexes AS PSUI
JOIN pg_index AS PI
ON PSUI.IndexRelid = PI.IndexRelid
WHERE PSUI.idx_scan = 0
AND PI.indisunique IS FALSE;
Devo executar qualquer sintaxe de coleta de estatísticas ou qualquer outra coisa antes de executá-lo? A consulta acima é adequada para esse propósito? Quer dizer, então todos os índices mostrados na saída SQL devem ser apenas excluídos?
É um BD de 8 anos, então as linhas resultantes podem ser realmente sobras e, acho que deve haver estatísticas suficientes, então diga onde e se é usado ou não.
FWIW aqui está uma consulta que tenho usado
Parece uma abordagem decente. Obviamente, deve-se aplicar alguma verificação humana a isso antes de descartar automaticamente tudo o que parece não utilizado. Por exemplo, é concebível que as estatísticas tenham sido redefinidas recentemente e/ou um índice seja usado apenas para algumas tarefas ocasionais em lote.