Buenas prácticas para optimizar la navegación en base de datos
🧠 Buenas prácticas para optimizar la navegación en base de datos
Después de trabajar con consultas pesadas y migraciones (sobre todo de GX9 a GX18), hay varias cosas que impactan muchísimo en la performance. Muchas no son obvias al principio, pero cuando las aplicás bien, la diferencia se nota enseguida.
⚡ 1. Evitar funciones sobre atributos en los filtros
Este es uno de los errores más comunes.
Ejemplo típico:
A simple vista parece correcto, pero internamente rompe el uso de índices. La base de datos tiene que evaluar esa función fila por fila, lo que termina en un full scan.
✔ Lo mejor es:
Y preparar el parámetro antes:
👉 La regla mental es simple:
nunca aplicar funciones sobre columnas si querés que el índice funcione.
📊 2. Usar LIKE de forma inteligente
No todos los LIKE son iguales.
LIKE '%texto%'→ lento (no usa índice)LIKE 'texto%'→ rápido (usa índice)
Si podés controlar cómo busca el usuario, tratá de llevarlo siempre a búsquedas tipo “empieza con”.
Ejemplo:
donde:
🔗 3. Evitar depender de una variable tipo “&Orden” para todo
A veces se arma lógica así:
TDeDeu >= &TDeDeuIni WHEN &Orden = ‘IMPO’
Esto hace que:
- los filtros no se combinen
- el optimizador genere planes menos eficientes
✔ Es mejor tener filtros independientes:
TDeDeu >= &TDeDeuIni WHEN &TDeDeuIni <> 0
👉 Dejá que la base de datos haga su trabajo. Está optimizada para eso.
🧩 4. Mantener los filtros simples y claros
Mientras más “limpia” sea la condición, mejor.
Evitar cosas como:
Porque los OR:
- suelen romper índices
- generan planes más costosos
Si no queda otra, está bien, pero siempre es mejor dividir la lógica o simplificarla.
📅 5. Usar rangos correctamente
Los rangos (>=, <=) son súper eficientes si hay índices.
Ejemplo:
TDeFecEmi <= &TDeFecFin
👉 Esto permite búsquedas muy rápidas, sobre todo en campos de fecha o numéricos.
🔢 6. Preferir igualdad cuando corresponde
Si sabés que estás buscando un valor exacto:
es mucho mejor que:
Porque:
- reduce el conjunto de datos
- mejora el uso de índices