optimizacion CASE

19/02/2009 - 08:23 por Normanmp | Informe spam
Cuando tenemos una Update, que usa muchos Case (pongo un ejemplo a
continuacion), como se puede optimicar, alguna idea?. Tengo entendido que el
uso indiscriminado de CASE penalizan las consultas, y me estoy viendo
penalizado pur una consulta.
La consulta es del tipo:

UPDATE tabla SET
campo_1 CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END
, campo_ 2=
CASE
when (NX<>'' and NX is not NULL)
then NX
else campo_ 2
END
, campo_3 = CASE ... END
, campo_4 = CASE ... END
, campo_5 = CASE ... END
, campo_6 = CASE ... END
, campo_7 = CASE ... END
, campo_8 = CASE ... END
.
.
.
,campo_25 = CASE ... END
where



GRACIAS

Preguntas similare

Leer las respuestas

#1 Carlos Sacristan
19/02/2009 - 10:31 | Informe spam
¿Has mirado el plan de ejecución para comprobar qué es lo que te está
penalizando?

Si esos CASE están en la parte del SET y son de ese tipo, no creo yo que
sean lo que te están penalizando...


Un saludo
-
www.navento.com
Servicios de Localización GPS


"Normanmp" wrote:

Cuando tenemos una Update, que usa muchos Case (pongo un ejemplo a
continuacion), como se puede optimicar, alguna idea?. Tengo entendido que el
uso indiscriminado de CASE penalizan las consultas, y me estoy viendo
penalizado pur una consulta.
La consulta es del tipo:

UPDATE tabla SET
campo_1 > CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END
, campo_ 2=
CASE
when (NX<>'' and NX is not NULL)
then NX
else campo_ 2
END
, campo_3 = CASE ... END
, campo_4 = CASE ... END
, campo_5 = CASE ... END
, campo_6 = CASE ... END
, campo_7 = CASE ... END
, campo_8 = CASE ... END
.
.
.
,campo_25 = CASE ... END
where



GRACIAS



Respuesta Responder a este mensaje
#2 Alejandro Mesa
19/02/2009 - 14:10 | Informe spam
Normanmp,

Estoy de acuerdo con Carlos. Ademas, sin ver el resto de la sentencia e
informacion sobre el plan de ejecucion, no sabemos que es lo que se quiere
mejorar. Seria interesante saber / ver si usas la clausula "where" o alguna
union (join).

Mientras tanto, puedes acortar la expresion en la funcion "case".

campo_1 > CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END



Es equivalente a usar:

campo_1 = CASE WHEN campoX > '' then campoX else campo_1 END

o

campo_1 = COALESCE(NULLIF(campoX, ''), campo_1)

En palabras, si [campoX] es mayor que la cadena vacia, entonces tampoco es
NULL.


AMB


"Normanmp" wrote:

Cuando tenemos una Update, que usa muchos Case (pongo un ejemplo a
continuacion), como se puede optimicar, alguna idea?. Tengo entendido que el
uso indiscriminado de CASE penalizan las consultas, y me estoy viendo
penalizado pur una consulta.
La consulta es del tipo:

UPDATE tabla SET
campo_1 > CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END
, campo_ 2=
CASE
when (NX<>'' and NX is not NULL)
then NX
else campo_ 2
END
, campo_3 = CASE ... END
, campo_4 = CASE ... END
, campo_5 = CASE ... END
, campo_6 = CASE ... END
, campo_7 = CASE ... END
, campo_8 = CASE ... END
.
.
.
,campo_25 = CASE ... END
where



GRACIAS



Respuesta Responder a este mensaje
#3 Jose TH
19/02/2009 - 14:21 | Informe spam
Además de que si ciertamente posee muchos Campo_N además de los tantos
Case's, como indica el ejemplo, da la impresión de no ser una tabla
normalizada.
Pero como no sabemos la estructura...



"Alejandro Mesa" escribió en el
mensaje news:
Normanmp,

Estoy de acuerdo con Carlos. Ademas, sin ver el resto de la sentencia e
informacion sobre el plan de ejecucion, no sabemos que es lo que se quiere
mejorar. Seria interesante saber / ver si usas la clausula "where" o
alguna
union (join).

Mientras tanto, puedes acortar la expresion en la funcion "case".

campo_1 >> CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END



Es equivalente a usar:

campo_1 = CASE WHEN campoX > '' then campoX else campo_1 END

o

campo_1 = COALESCE(NULLIF(campoX, ''), campo_1)

En palabras, si [campoX] es mayor que la cadena vacia, entonces tampoco es
NULL.


AMB


"Normanmp" wrote:

Cuando tenemos una Update, que usa muchos Case (pongo un ejemplo a
continuacion), como se puede optimicar, alguna idea?. Tengo entendido que
el
uso indiscriminado de CASE penalizan las consultas, y me estoy viendo
penalizado pur una consulta.
La consulta es del tipo:

UPDATE tabla SET
campo_1 >> CASE
when (campoX<>'' and campoXis not NULL)
then campoX
else campo_1
END
, campo_ 2>> CASE
when (NX<>'' and NX is not NULL)
then NX
else campo_ 2
END
, campo_3 = CASE ... END
, campo_4 = CASE ... END
, campo_5 = CASE ... END
, campo_6 = CASE ... END
, campo_7 = CASE ... END
, campo_8 = CASE ... END
.
.
.
,campo_25 = CASE ... END
where



GRACIAS



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida