50 lines
3.1 KiB
SQL
50 lines
3.1 KiB
SQL
-- Optimizaciones reversibles para busqueda textual INVIMA.
|
|
-- Ejecutar con: npm run benchmark:optimize
|
|
-- No modifica datos regulatorios; solo agrega extension/indices y estadisticas.
|
|
-- CREATE INDEX CONCURRENTLY no puede ejecutarse dentro de una transaccion explicita.
|
|
|
|
CREATE EXTENSION IF NOT EXISTS pg_trgm;
|
|
|
|
-- Corrige una posible ejecucion anterior interrumpida: IF NOT EXISTS no repara indices invalidos.
|
|
-- Se revierte eliminando los indices en optimization_down.sql.
|
|
DROP INDEX CONCURRENTLY IF EXISTS idx_bench_catalog_order;
|
|
DROP INDEX CONCURRENTLY IF EXISTS idx_bench_catalog_order_prefix;
|
|
|
|
-- No se crea indice B-tree de orden por producto completo:
|
|
-- 1) producto completo excede el limite de tupla B-tree en filas largas.
|
|
-- 2) LEFT(producto, 512) encontro valores con codificacion invalida en esta base local.
|
|
-- La optimizacion segura de esta iteracion se limita a predicados textuales indexables.
|
|
|
|
-- Beneficia query_06/query_07: coincide exactamente con COALESCE(registro_sanitario, '') ILIKE '%marcapasos%'.
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_bench_catalog_registro_coalesce_trgm
|
|
ON invima_api_catalog USING GIN ((COALESCE(registro_sanitario, '')) gin_trgm_ops);
|
|
|
|
-- Beneficia query_06/query_07: coincide exactamente con COALESCE(expediente, '') ILIKE '%marcapasos%'.
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_bench_catalog_expediente_coalesce_trgm
|
|
ON invima_api_catalog USING GIN ((COALESCE(expediente, '')) gin_trgm_ops);
|
|
|
|
-- Beneficia query_06/query_07: coincide exactamente con COALESCE(producto, '') ILIKE '%marcapasos%'.
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_bench_catalog_producto_coalesce_trgm
|
|
ON invima_api_catalog USING GIN ((COALESCE(producto, '')) gin_trgm_ops);
|
|
|
|
-- Beneficia query_06/query_07: coincide exactamente con COALESCE(categoria_canonica, '') ILIKE '%marcapasos%'.
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_bench_catalog_categoria_canonica_coalesce_trgm
|
|
ON invima_api_catalog USING GIN ((COALESCE(categoria_canonica, '')) gin_trgm_ops);
|
|
|
|
-- Beneficia query_06/query_07: coincide exactamente con COALESCE(categoria_linea, '') ILIKE '%marcapasos%'.
|
|
CREATE INDEX CONCURRENTLY IF NOT EXISTS idx_bench_catalog_categoria_linea_coalesce_trgm
|
|
ON invima_api_catalog USING GIN ((COALESCE(categoria_linea, '')) gin_trgm_ops);
|
|
|
|
-- Mejora estimaciones de cardinalidad y ordenamiento de query_06/query_07.
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN fecha_vencimiento SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN producto SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN registro_sanitario SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN expediente SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN categoria_canonica SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN categoria_linea SET STATISTICS 1000;
|
|
ALTER TABLE invima_api_catalog ALTER COLUMN search_text SET STATISTICS 1000;
|
|
|
|
-- ANALYZE invima_api_catalog se deja como paso manual opcional.
|
|
-- En la base local inspeccionada falla por datos textuales con codificacion invalida (0xc3).
|
|
-- No se corrigen datos regulatorios desde esta migracion.
|