rag_template / db /migrations /002_optimize_indexes.sql
Guilherme Favaron
Major update: Add hybrid search, reranking, multiple LLMs, and UI improvements
1b447de
-- Migração 002: Otimiza índices para melhor performance
-- Data: 2026-01-22
-- Descrição: Adiciona índices compostos e otimiza queries comuns
-- Índice composto para busca por session_id + created_at
CREATE INDEX IF NOT EXISTS idx_documents_session_created
ON documents(session_id, created_at DESC);
-- Índice para título (buscas textuais)
CREATE INDEX IF NOT EXISTS idx_documents_title
ON documents USING GIN (to_tsvector('english', title));
-- Índice para conteúdo (buscas textuais)
CREATE INDEX IF NOT EXISTS idx_documents_content
ON documents USING GIN (to_tsvector('english', content));
-- Índice para query_metrics por session_id e data
CREATE INDEX IF NOT EXISTS idx_query_metrics_session_created
ON query_metrics(session_id, created_at DESC);
-- Índice para mensagens por chat_id
CREATE INDEX IF NOT EXISTS idx_messages_chat_id
ON messages(chat_id, created_at DESC);
-- Estatísticas de uso (opcional - comentar se não necessário)
-- Cria view materializada para estatísticas rápidas
CREATE MATERIALIZED VIEW IF NOT EXISTS documents_stats AS
SELECT
session_id,
COUNT(*) as total_docs,
AVG(LENGTH(content)) as avg_content_length,
MAX(created_at) as last_upload,
MIN(created_at) as first_upload
FROM documents
GROUP BY session_id;
-- Índice na view materializada
CREATE UNIQUE INDEX IF NOT EXISTS idx_documents_stats_session
ON documents_stats(session_id);
-- Função para refresh da view (chamar periodicamente)
CREATE OR REPLACE FUNCTION refresh_documents_stats()
RETURNS void AS $$
BEGIN
REFRESH MATERIALIZED VIEW CONCURRENTLY documents_stats;
END;
$$ LANGUAGE plpgsql;