Cita:
Empezado por ronalg
mamcx podrias darnos un luz sobre el asunto?
|
Debes hacer lo mismo cuando no entiendes el codigo, ejecutarlo paso a paso.
Esta es la parte clave
Código SQL
[-]where iif(:cod_cliente is null,1,iif(:cod_cliente=a.ref_cliente,1,0))=1
Cuando el motor lo recibe, lo sustituye por los valores. Que pasa si lo haces?
Código SQL
[-]where iif(null is null,1)
Lo cual se ejecuta POR CADA FILA DE LA TABLA. Es probable que FB pueda optimizar este caso (no estoy seguro: Hay que chequear el plan de ejecucion)
El problema es con el otro caso:
Código SQL
[-]
where iif(false, iif(1=a.ref_cliente,1,0))=1
...
where iif(True,1,0))=1
where iif(False,1,0))=1
where iif(False,1,0))=1
etc...
Estas anulando la posibilidad de usar el indice, porque tiene que chequear fila a fila.
Ves?