Access, Consultas - Función Elegir(Choose) vs. Siinm(Iif)

Estoy desarrollando una base de datos que se alimenta de muchas tablas y consultas, por lo que estoy tratando de optimizar tiempos de respuesta al abrir las consultas.

Estoy analizando la función Elegir como alternativa a la concatenación de Siinm en casos correlativos... P.ej.  Siinm(Campo=1; valor1; Siinm(Campo=2; valor2; Siinm(Campo=3; valor3; ....)))... En algunos casos llego hasta 10.

Sé que en las consultas el uso de la función Siinm tiende a requerir más tiempo que otras funciones, pero no sé si la función Elegir requerirá más, menos o tiempo igual.

Según la ayuda de MS comenta que la función Elegir se evalúa en cada caso, pero realmente no sé qué quiere decir ni lo que implica en tiempos.

¿Alguién podría por favor echarme una mano? ¿Se os ocurre otra alternativa a estos casos?

2 Respuestas

Respuesta
2

muchas tablas=mal diseño

En todo caso usa claves.

Hola kumbus!

gracias por el consejo, así lo estoy haciendo... el tema del nº de tablas es por un tema de nº de librerías para mi base de datos, en muchos casos puede ser una selección manual dentro de las librerías pero en otras tengo implementado automatismos de selección.

Estoy metido en optimizar estos automatismos; con la solución de Sveinbjorn he bajado un poco los tiempos. Esperaré a ver cómo se comporta cuando se vayan incrementando los registros de las tablas que no son librería... si la ralentización es inviable empezaré a pensar en serio una migración a SQL, pero como todo... es tiempo y el tiempo es oro ;)

Un saludo

Respuesta
2

A nivel "técnico" no te puedo decir si es más rápido Choose o IIF, porque lo desconozco. Habría que hacer la prueba "cronómetro en mano" para ver la rapidez de respuesta de cada uno.

Por comentarte otra opción, que creo es más rápida: crea una función personalizada (y pública) en un módulo usando Select Case, pues tiene una respuesta mejor que If Else Then (que viene parecido a los iif encadenados), algo así:

Public Function fncElige(elValor AS ...) AS ...
Select Case elValor
   Case 1
       fncElige=Valor1
   Case 2
      fncElige=Valor2
   ...
End Select
End Function

Donde tendrás que definir el tipo del dato de entrada  (el Valor AS String/Integer...) y el de salida/ fncElige() AS String/Long...)

Cuando la quieras usar, pues lo harías igual que usas cualquier función nativa de Access, por ejemplo, en una consulta en vez de poner todos esos SiInm encadenados, pondrías fncElige(Campo)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas