Rendimiento de fórmulas en columnas.

08/07/2005 - 12:53 por José Antonio | Informe spam
Tengo una tabla con dos campos numericos:

columna cantidad que guarda la cantidad prestada
columna devuelta que guarda la cantidad devuelta.

cuando la cantidad prestada sea igual que la devuelta quiero poner una
columna flag para saber que ha devuelto completamente lo prestado.

puedo poner una formula en esta columna de la forma 'case when
cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql server
lo cambiase el flag automaticamente.

tambien lo podria hacer con un trigger.

mi única duda es teniendo en cuenta que la actualización de la columna
devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
utilización de un trigger para cambiar el flag?


Saludos

Preguntas similare

Leer las respuestas

#1 Maxi
08/07/2005 - 13:42 | Informe spam
Hola, sinn dudas que el case es mucho mas eficiente porque solo es una
tranformacion de los datos al vuelo. Los triggers no solo que seran mas
ineficientes sino que tambien son mucho mas complejos de administrar y no te
asegurare el 100% de confiabilidad, ya que estos se pueden deshabilitar (por
ej si se pasan datos via DTS)


Salu2
Maxi


"José Antonio" escribió en el
mensaje news:
Tengo una tabla con dos campos numericos:

columna cantidad que guarda la cantidad prestada
columna devuelta que guarda la cantidad devuelta.

cuando la cantidad prestada sea igual que la devuelta quiero poner una
columna flag para saber que ha devuelto completamente lo prestado.

puedo poner una formula en esta columna de la forma 'case when
cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql server
lo cambiase el flag automaticamente.

tambien lo podria hacer con un trigger.

mi única duda es teniendo en cuenta que la actualización de la columna
devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
utilización de un trigger para cambiar el flag?


Saludos


Respuesta Responder a este mensaje
#2 Miguel Egea
08/07/2005 - 13:47 | Informe spam
Además de los datos que te ofrece maxi te puedo decir que si creas un índice
por esa columna además de que materializas los datos, si la distribución es
adecuada podrá ser usado a la hora de buscar por ejemplo todas los prestamos
pendientes.

Saludos
Miguel Egea

"Maxi" escribió:

Hola, sinn dudas que el case es mucho mas eficiente porque solo es una
tranformacion de los datos al vuelo. Los triggers no solo que seran mas
ineficientes sino que tambien son mucho mas complejos de administrar y no te
asegurare el 100% de confiabilidad, ya que estos se pueden deshabilitar (por
ej si se pasan datos via DTS)


Salu2
Maxi


"José Antonio" escribió en el
mensaje news:
> Tengo una tabla con dos campos numericos:
>
> columna cantidad que guarda la cantidad prestada
> columna devuelta que guarda la cantidad devuelta.
>
> cuando la cantidad prestada sea igual que la devuelta quiero poner una
> columna flag para saber que ha devuelto completamente lo prestado.
>
> puedo poner una formula en esta columna de la forma 'case when
> cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql server
> lo cambiase el flag automaticamente.
>
> tambien lo podria hacer con un trigger.
>
> mi única duda es teniendo en cuenta que la actualización de la columna
> devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
> utilización de un trigger para cambiar el flag?
>
>
> Saludos
>
>



Respuesta Responder a este mensaje
#3 Enrique Barceló
08/07/2005 - 14:02 | Informe spam
Hola,

¿Y qué tal convertir esa tabla en una vista? De esa forma no te penalizaría
las inserciones y actualizaciones...

Un saludo,

Enrique Barceló

"José Antonio" escribió en el
mensaje news:
Tengo una tabla con dos campos numericos:

columna cantidad que guarda la cantidad prestada
columna devuelta que guarda la cantidad devuelta.

cuando la cantidad prestada sea igual que la devuelta quiero poner una
columna flag para saber que ha devuelto completamente lo prestado.

puedo poner una formula en esta columna de la forma 'case when
cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql server
lo cambiase el flag automaticamente.

tambien lo podria hacer con un trigger.

mi única duda es teniendo en cuenta que la actualización de la columna
devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
utilización de un trigger para cambiar el flag?


Saludos


Respuesta Responder a este mensaje
#4 Miguel Egea
08/07/2005 - 14:12 | Informe spam
Hola Enrique

No creo que sea una buena idea, un campo calculado no tiene penalizaciones
ni en espacio ni en rendimiento en inserciones y actualizaciones, SQL calcula
"al vuelo" esa información cuando devuelve los datos. unica excepción es si
el campo está en un índice y ese índice es usado. Las vistas, que por otra
parte son un recurso maravilloso, no es bueno pasarse con ellas por que
desgraciadamente la experiencia me dice que acaban usandose vistas, de vistas
,de vistas de vistas que al final tiene 10 veces la misma tabla si explotases
el FROM y el optimizador de consultas de SQL2000 no elimina tablas
redundantes en la cláusula from, por lo que puedes penalizar bastante el
rendimiento simplemente por esa "mala práctica".

Esto no quiere decir en absoluto que las vistas no sean un recurso
magnífico, sino que hay que usarlas como todo con cuidado. Dice mi amigo
pablo peláez esta frase "cuando tienes un martillo todo te parece un clavo",
y creo que aplica muy bien a esto, si bien con una vista se soluciona el
problema, en este caso es mucho mejor alternativa crear un campo calculado e
indexarlo si es necesario.

Saludos
Miguel Egea

"Enrique Barceló" wrote:

Hola,

¿Y qué tal convertir esa tabla en una vista? De esa forma no te penalizaría
las inserciones y actualizaciones...

Un saludo,

Enrique Barceló

"José Antonio" escribió en el
mensaje news:
> Tengo una tabla con dos campos numericos:
>
> columna cantidad que guarda la cantidad prestada
> columna devuelta que guarda la cantidad devuelta.
>
> cuando la cantidad prestada sea igual que la devuelta quiero poner una
> columna flag para saber que ha devuelto completamente lo prestado.
>
> puedo poner una formula en esta columna de la forma 'case when
> cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql server
> lo cambiase el flag automaticamente.
>
> tambien lo podria hacer con un trigger.
>
> mi única duda es teniendo en cuenta que la actualización de la columna
> devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
> utilización de un trigger para cambiar el flag?
>
>
> Saludos
>
>



Respuesta Responder a este mensaje
#5 Maxi
08/07/2005 - 14:12 | Informe spam
Hola y sin indices? seria un poco lento la consulta no?


Salu2
Maxi


"Enrique Barceló" escribió en el mensaje
news:
Hola,

¿Y qué tal convertir esa tabla en una vista? De esa forma no te
penalizaría las inserciones y actualizaciones...

Un saludo,

Enrique Barceló

"José Antonio" escribió en el
mensaje news:
Tengo una tabla con dos campos numericos:

columna cantidad que guarda la cantidad prestada
columna devuelta que guarda la cantidad devuelta.

cuando la cantidad prestada sea igual que la devuelta quiero poner una
columna flag para saber que ha devuelto completamente lo prestado.

puedo poner una formula en esta columna de la forma 'case when
cantidad>devuelta then 'N' else 'S' end, esto bastaria para que sql
server lo cambiase el flag automaticamente.

tambien lo podria hacer con un trigger.

mi única duda es teniendo en cuenta que la actualización de la columna
devuelta es bastante grande ¿Que ofrece mejor rendimiento la fórmula o la
utilización de un trigger para cambiar el flag?


Saludos






Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida