Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

¿Vista o función?

Estas en el tema de ¿Vista o función? en el foro de Bases de Datos General en Foros del Web. Hoy me dijeron algo que me pareció raro y me hizo dudar aunque estoy 90% seguro jeje ¿Una vista tiene algún tipo de costo? como ...
  #1 (permalink)  
Antiguo 27/12/2013, 12:57
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
¿Vista o función?

Hoy me dijeron algo que me pareció raro y me hizo dudar aunque estoy 90% seguro jeje

¿Una vista tiene algún tipo de costo? como de almacenar o actualizar índices?

Porque el tema surgió cuando, para una consulta, yo quería crear una vista pero otra persona quería realizarlo con una función, que según yo creo, por ser algo simple y en una consulta que no se necesita parámetros, una vista sirve perfecto.

Pero uno de los argumentos fué que las vistas no son para eso, que hay que utilizar vistas cuando el costo de los índices valga la pena...

Según mi entender, las vistas tienen el objetivo de abstraer consultas complejas, reaultilizarlas, no guardan datos y solamente ejecutar la el select definido.

Ejecutar una vista es lo mismo que ejecutar una consulta directamente, no? no acarrea ningún costo extra. ¿O me equivoco?
Y como nunca vi algo de consumo de recursos en la documentación de alguna motor de base de datos acerca de las vistas, quizá algo desconozca.

Por las dudas la base de datos en cuestión es Postgresql
  #2 (permalink)  
Antiguo 27/12/2013, 13:18
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ¿Vista o función?

Las vistas no consumen mas indice, son como dices para cuando tienes una consulta compleja(digamos varios joins) y esta la quieres utilizar para varias cosas, es mejor tener una vista ya que el plan de ejecucion se guarda y el manejador de bases de datos siempre ejecuta este plan(a menos que le indiques que lo recalcule en cada ejecucion) por lo que resumiendo, es mejor usar una vista para el escenario que planteas :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 27/12/2013, 13:49
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: ¿Vista o función?

Que guarda el plan de ejecución no lo tenía. O sea que una consulta por más que funcione con una vista o con una función es mejor en una vista.

Otra es que en la vista puedo hacer, por ejemplo, un select sum(campo) from mi_vista, select campos from mi_vista where ... etc, que con una función no podría realizar o no podría trabajar como una tabla.
  #4 (permalink)  
Antiguo 27/12/2013, 13:59
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ¿Vista o función?

las 2 guardan los planes de ejecucion y si tu funcion retorna una tabla puedes tambien usarla en un select
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 27/12/2013, 14:35
 
Fecha de Ingreso: diciembre-2009
Ubicación: Misiones
Mensajes: 867
Antigüedad: 14 años, 4 meses
Puntos: 65
Respuesta: ¿Vista o función?

Tenés razón.

O sea, una función puede hacer lo mismo que una vista, pero la vista es más sencilla. Si quiero sacar un resultado con campos de diferentes tablas o campos calculados como totales, descuentos, etc. en una función se me haría más difícil o lioso de mantener porque voy a tener que declarar la salida.
Y si no necesito usar variables, mejor aún una vista.
  #6 (permalink)  
Antiguo 27/12/2013, 18:42
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: ¿Vista o función?

para lo que quieres hacer es mejor una vista que una funcion porque, bueno porque puedes obtener campos calculados de la vista, puedes indexar tus resultados(desde sql server 2008 puedes usar vistas indexadas), ya que si quieres obtener calculos complejos si te recomandaria la funcion, pero no es el caso :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Etiquetas: select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:42.