Buenas prácticas para optimizar la navegación en base de datos

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:

 
Upper(Trim(TDeTit)) Like Upper(&TDeNomCom)
 

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:

 
TDeTit Like &TDeNomCom
 

Y preparar el parámetro antes:

 
&TDeNomCom = Trim(Upper(&TDeNomCom)) + ‘%’;
 

👉 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:

 
TDeTit Like &TDeNomCom
 

donde:

 
&TDeNomCom = ‘JUAN%’
 

🔗 3. Evitar depender de una variable tipo “&Orden” para todo

A veces se arma lógica así:

 
TDeFalAno >= &TDeFalAno WHEN &Orden = ‘FALL’
TDeDeu >= &TDeDeuIni WHEN &Orden = ‘IMPO’
 

Esto hace que:

  • los filtros no se combinen
  • el optimizador genere planes menos eficientes

✔ Es mejor tener filtros independientes:

 
TDeFalAno >= &TDeFalAno WHEN &TDeFalAno <> 0
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:

 
(AreCod = 24 OR AreCod > 89)
 

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 >= &TDeFecIni
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:

 
IdBien = &IdBien
 

es mucho mejor que:

 
IdBien >= &IdBien
 

Porque:

  • reduce el conjunto de datos
  • mejora el uso de índices
Deja un comentario 0

Your email address will not be published. Campos requeridos marcados *