-- ============================================ -- rioCata - Índices para Optimización -- ============================================ -- ============================================ -- ÍNDICES EN CLAVES FORÁNEAS -- ============================================ CREATE INDEX idx_sesion_participante_sesion_id ON sesion_participante(sesion_id); CREATE INDEX idx_sesion_participante_catador_id ON sesion_participante(catador_id); CREATE INDEX idx_muestra_sesion ON muestra(sesion_id); CREATE INDEX idx_eval_muestra ON evaluacion(muestra_id); CREATE INDEX idx_eval_participante ON evaluacion(sesion_participante_id); -- ============================================ -- ÍNDICES EN CAMPOS ESPECÍFICOS -- ============================================ -- Índice para búsquedas por tipo de defecto CREATE INDEX idx_eval_defecto ON evaluacion(defecto); -- Índice para búsquedas por puntaje final CREATE INDEX idx_eval_puntaje_final ON evaluacion(puntaje_final DESC); -- ============================================ -- ÍNDICES GIN PARA JSONB Y ARRAYS -- ============================================ -- Índices GIN para consultas de contención en JSONB CREATE INDEX idx_eval_json_intensidades ON evaluacion USING GIN (intensidades jsonb_path_ops); CREATE INDEX idx_eval_aroma_notas ON evaluacion USING GIN (fragancia_aroma_notas); CREATE INDEX idx_eval_sabor_notas ON evaluacion USING GIN (sabor_notas); -- Índices GIN para arrays (permite consultas con @>, &&, etc.) CREATE INDEX idx_eval_tazas_defectuosas ON evaluacion USING GIN (tazas_defectuosas); CREATE INDEX idx_eval_tazas_no_uniformes ON evaluacion USING GIN (tazas_no_uniformes); CREATE INDEX idx_eval_sensacion_boca ON evaluacion USING GIN (sensacion_en_boca); CREATE INDEX idx_eval_gustos_predominantes ON evaluacion USING GIN (gustos_predominantes); -- ============================================ -- ÍNDICES FUNCIONALES (OPCIONALES) -- ============================================ -- Índices funcionales para consultas frecuentes sobre valores específicos en intensidades -- Estos son opcionales pero mejoran el rendimiento de queries que filtran por valores afectivos específicos -- Ejemplo: filtrar por acidez afectiva >= 8 CREATE INDEX idx_eval_int_acidez_afectiva ON evaluacion ( ((intensidades->'acidez'->>'afectiva')::int) ); -- Ejemplo: filtrar por dulzor afectivo >= 8 CREATE INDEX idx_eval_int_dulzor_afectivo ON evaluacion ( ((intensidades->'dulzor'->>'afectiva')::int) ); -- Ejemplo: filtrar por sabor afectivo >= 8 CREATE INDEX idx_eval_int_sabor_afectivo ON evaluacion ( ((intensidades->'sabor'->>'afectiva')::int) ); -- ============================================ -- ÍNDICES DE TEXTO (PARA BÚSQUEDA) -- ============================================ -- Índice para búsqueda de texto en otras_notas CREATE INDEX idx_eval_otras_notas_gin ON evaluacion USING GIN (to_tsvector('spanish', COALESCE(otras_notas, ''))); -- Índice para búsqueda en nombres de sesión CREATE INDEX idx_sesion_nombre_gin ON sesion USING GIN (to_tsvector('spanish', COALESCE(nombre, ''))); -- ============================================ -- COMENTARIOS -- ============================================ COMMENT ON INDEX idx_eval_json_intensidades IS 'Índice GIN para consultas de contención en intensidades (jsonb_path_ops)'; COMMENT ON INDEX idx_eval_tazas_defectuosas IS 'Índice GIN para búsquedas de tazas defectuosas específicas'; COMMENT ON INDEX idx_eval_int_acidez_afectiva IS 'Índice funcional para filtros por valor afectivo de acidez';