[OT] Crear vistas en MySQL es hacer doble consulta?

1,641 views
Skip to first unread message

ZeRoberto

unread,
Dec 19, 2012, 11:15:38 AM12/19/12
to publicesvfoxpro
Hola a todos
 
Estoy creando una vistas en MySQL que hacen referencia a otras tabla y ademas crea campos calculados un poco complejas, para evitar estar poniendo todo el codigo en mi aplicacion. Pero como funciona esto de las Vistas?
 
Segun veo primero hace la consulta de la vista y a partir de eso hace nuevamente la consulta que uno llama en nuestros formularios.
 
Ejemplo: Algo simple
 
Stock_Vista
SELECT a.*, b.*, lnStock := lnStock - a.Cantidad / a.Fraccion FROM productos
LEFT JOIN productos_precios b ONa.Codigo = b.Codigo
 
En mi formulario llamo esta vista
 
SELECT * FROM stock_vista WHERE Codigo = '000001'
 
Cuando hago esto, me doy cuenta de que primero ejecuta el comando de la vista y sobre el resultado de este ejecuta el comando de mi formulario osea SELECT * FROM stock_vista, Cosa que estaria haciendo doble consulta y en caso de que la tabla cresca el tiempo va a ser considerable.
 
Preguntas:
 
1.- Como funcionan las vistas?
2.- Es mejor hacerlo con Store Procedures?
 
Saludos

Fox Learner

unread,
Dec 19, 2012, 12:13:40 PM12/19/12
to publice...@googlegroups.com
ZeRoberto,

Para que te complicas con el MySql?...

Jala tus datos(solo los necesarios) a un cursor de VFP y (si quieres desconectate)..

A partir de ese punto ya puedes armar tus campos calculados desde VFP, para emitir los reportes que desees.

Puedes navegar a tu antojo sobre esos datos locales en memoria.

Saludos!


Douglas Sánchez

unread,
Dec 19, 2012, 12:25:53 PM12/19/12
to publice...@googlegroups.com
ZRoberto en teoria lo correcto seria usar un store procedure ya que las consultas estan precompilada,  podes enviar parametros e incluso, yo uso las vista mas que para enumerar id de la tabla encabezado y detalle que estan interelacionadas claro usando mysql server que es lo que me imagino que usas.

ejemplo

DROP VIEW IF EXISTS `vistaenccalculo`;
CREATE OR REPLACE ALGORITHM=UNDEFINED DEFINER=`root`@`localhost` SQL SECURITY DEFINER VIEW `vistaenccalculo` AS select ifnull(max((`tblenccalculo`.`idenccalculo` + 1)),0) AS `consec` from `tblenccalculo`;

Saludes

Douglas



--
 
 



--
Ing. Douglas Sánchez Guillén
      Consultor Informatico
Claro: 505 88495476

Allan Raúl Acuña

unread,
Dec 19, 2012, 1:45:30 PM12/19/12
to publice...@googlegroups.com
Estimado Colegas

Mis saludos antes que nada.
 
Alguno de ustedes tendran una idea y/o rutina para calcular los dias Laborales entre fechas?

Saludos cordiales;


Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
            +(505) 8 831 8191      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica

Fox Learner *

unread,
Dec 19, 2012, 1:49:22 PM12/19/12
to publice...@googlegroups.com
A qué te refieres exactamente?...

A los días de lunes a viernes?...

Lunes a sabado?..

Si es con días festivos en Mexico eso no funcionaría porque cambian cada año y tambien se recorren dependiendo de como lo indique la ley para cada año.

Saludos!

Andrés Oscar Gimbatti

unread,
Dec 19, 2012, 3:49:28 PM12/19/12
to publice...@googlegroups.com
Fox:
todo lo que puedas calcular y filtrar en el motor sube la perfomance de la consulta muchísimo. Quizás con pocos datos no lo notas, pero cuando las tablas empiezan a crecer es muy superior el tiempo de procesar los cursores localmente que ya hecerlo en el motor de base de datos
Ejemplo usando postgres, de una tabla con 100.000 registros aproximadamente, traigo los reg que necesito y calculo los campos en otra consulta con un cursor local me tarda aprox 7 segundos, lo mismo hecho sobre el motor tarda menos de un segundo.

Saludos

Fox Learner

unread,
Dec 19, 2012, 4:09:17 PM12/19/12
to publice...@googlegroups.com
Veo que el concepto de las vistas difiere un poco dentro de MySql que dentro de VFP.

En VFP las vistas se usaban para poder actualizar datos hacia las tablas.

En MySql, veo que difiere un poco el concepto.


Saludos! 

Carlos Ayala

unread,
Dec 19, 2012, 4:33:38 PM12/19/12
to publice...@googlegroups.com
Una vista esta construida en base a un consulta SELECT la diferencia es que esta VISTA (consulta) se convierte en un archivo lógico de la BD y simula una tabla que constante mente se esta actualizando en linea por tal razón es mucho mas rápido y cómoda la utilización de vistas en los desarrollos, por otro lado es recomendable que en las vistas contengan solo informacion necesaria y tratar d eevitar el uso de * en la consulta.

mpulla

unread,
Dec 19, 2012, 4:38:31 PM12/19/12
to publice...@googlegroups.com
Hola Allan.

Trabajo con Sql Server.

En lo personal tengo un tabla con los días festivos y fines de semana, luego la cruzo con una tabla calendario que la genero al vuelo apoyándome una tabla auxilar de números.

Saludos.
Mauricio

Allan Raúl Acuña

unread,
Dec 19, 2012, 4:59:50 PM12/19/12
to publice...@googlegroups.com
Gracias estimados.
 
Voy a consultar a los clientes exactamente como consideran el calculo.


Saludos cordiales;


Lic. Allan R. Acuña
Desarrollador Independiente
msn= allan...@hotmail.com
skype= niceasysoft
            +(505) 8 831 8191      
www.NicEasySoft.com
Managua, Nicaragua
Centroamérica

 

Date: Wed, 19 Dec 2012 13:38:31 -0800
From: jmaur...@yahoo.es
To: publice...@googlegroups.com
Subject: Re: [vfp] Cálculo de días Laborales?
--
 
 

ZeRoberto

unread,
Dec 20, 2012, 3:01:25 PM12/20/12
to publice...@googlegroups.com
Osea me da la impresion que al momento de hacer un SELECT sobre una VISTA hace 2 veces el trabajo

Cuando me doy cuenta, cuando creo una tabla de prueba con los siguientes campos

Prueba
-------
Código Nombre Marcado
------ ------ -------
   1   UNO       0
   2   DOS       0
   3   TRES      1
   4   CUATRO    1

Ahora Creo una Vista de Prueba

Prueba_Vista
------------
SELECT * FROM Prueba WHERE Marcado = 1
      

Ahora hago SELECT a Prueba_Vista con la condición de que el código sea menor que 3

SELECT * FROM Prueba_Vista WHERE Codigo < 3

Y el resultado es un cursor vació, prueba de que hizo doble consulta.

Esto me preocupa porque cuando las tablas sean demasiado grandes va a demorar y la tabla con la que estoy manejando vistas es justamente la de productos prácticamente consulto en el evento InteractiveChange()

Saludos





Douglas Sánchez

unread,
Dec 20, 2012, 3:03:31 PM12/20/12
to publice...@googlegroups.com
Yo que tu usaria un store procedure y procurar o enviar la consulta de una, y no usar esto SELECT * , mejor
SELECT campo1,campo2, campo3 si queres mejorar el performaces de la consulta


saludes



El 20 de diciembre de 2012 14:01, ZeRoberto <zero...@gmail.com> escribió:
SELECT *

ZeRoberto

unread,
Dec 20, 2012, 3:06:04 PM12/20/12
to publice...@googlegroups.com
Gracias Douglas 

A esa misma conclusión estoy llegando, solo usar Vistas para tablas pequeñas.

Saludos

--
 
 

Carlos Miguel FARIAS

unread,
Dec 20, 2012, 3:24:49 PM12/20/12
to publice...@googlegroups.com

Estas confundiendo para que son las vistas. No importa el tamaño de las tablas subyacentes. Lo que importa es si tu 'pila' de vistas es coherente con el uso final. Dada una sentencia Select y una vista, va a ser mas rápida la vista, porque el motor ya la par seo y tiene un plan de trabajo armado.
Saludos:, Miguel, La Pampa (RA)

--
 
 
Reply all
Reply to author
Forward
0 new messages