aumentar rapidez en una select

03/06/2004 - 13:34 por reo | Informe spam
tengo el select:

select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
from da1,a1,c,d
where da1.campo1=a1.campo1 and da1.campo2='555' and c.campo1=a1.campo2 and
d.campo1=a1.campo3
union all
select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
from df1,f1,c,d
where df1.campo1=f1.campo1 and df1.campo2='555' and c.campo1=f1.campo2 and
d.campo1=f1.campo3
union all
select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
from do1,o1,c,d
where da1.campo1=o1.campo1 and do1.campo2='555' and c.campo1=o1.campo2 and
d.campo1=o1.campo3
union all
select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
from dt1,t1,c,d
where dt1.campo1=t1.campo1 and dt1.campo2='555' and c.campo1=t1.campo2 and
d.campo1=t1.campo3

esto me tarda 15 segundos desde el analizador de consultas.

Lo he metido cada select en una tabla temporal sin hacer uniones y tarda
igual.

hay alguna manera de que tarde menos.

muchas gracias

Preguntas similare

Leer las respuestas

#6 Jose Mariano Alvarez \(MUG\)
03/06/2004 - 19:14 | Informe spam
Es el tiempo que tarda en poner todo en memoria.
No creo que puedas mejorar este tiempo si no puedes cambiar la consulta o
mejorarla.
12 segundos es una eternidad si los volúmenes son pequeños.
Ejecutaste el asistente tal como te comento Javier?
Las estadísticas estan actualizadas ?
Tienes la creacion automática de estadísticas activada?

Saludos

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"reo" wrote in message
news:%23JMq$
no tenia ningun indice, he puesto a todas las tablas y ahora
en la primera vez que la ejecuto me tarda 12 segundos y si la haga una
segunda vez tarda 2 segundos
es decir, he mejorado, pero como puedo hacer que la primera tambien tarde


2
segundos.

muchas gracias


"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>


escribió
en el mensaje news:%
> Puedes intentar creando cover index sobre las tablas
> C (campo1,campo2)
> D (campo1,campo2)
> A1 (campo1,campo2,campo3)
> CA(campo2,campo1,campo4,campo5)
>
>
> Por otro lado todo esto es muy relativo ya que no sabemos nada del


diseño
de
> las tablas, no sabemos nada de los indices existentes, ni de la
cardinalidad
> de la información. Tal como te dijo Javier el Index Tuning Wizard es una
de
> las mejores alternativas.
>
> Además yo cambiaría de sintaxis
>
> select
> da1.campo4,
> da1.campo5,
> a1.campo1,
> c.campo2,
> d.campo2
> from
> da1,
> a1,
> c,
> d
> where
> da1.campo1¡.campo1
> and da1.campo2='555'
> and c.campo1¡.campo2
> and d.campo1¡.campo3
>
>
>
> select
> da1.campo4,
> da1.campo5,
> d1.campo1, -- lo cambie
> c.campo2,
> d.campo2
> from
> da1
> join a1 on da1.campo1¡.campo1
> join c on c.campo1¡.campo2
> join d on d.campo1¡.campo3
> where
> da1.campo2='555'
>
>
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
>
> "reo" wrote in message
> news:
> > tengo el select:
> >
> > select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
> > from da1,a1,c,d
> > where da1.campo1¡.campo1 and da1.campo2='555' and c.campo1¡.campo2
and
> > d.campo1¡.campo3
> > union all
> > select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
> > from df1,f1,c,d
> > where df1.campo1ñ.campo1 and df1.campo2='555' and c.campo1ñ.campo2
and
> > d.campo1ñ.campo3
> > union all
> > select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
> > from do1,o1,c,d
> > where da1.campo1=o1.campo1 and do1.campo2='555' and c.campo1=o1.campo2
and
> > d.campo1=o1.campo3
> > union all
> > select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
> > from dt1,t1,c,d
> > where dt1.campo1=t1.campo1 and dt1.campo2='555' and c.campo1=t1.campo2
and
> > d.campo1=t1.campo3
> >
> > esto me tarda 15 segundos desde el analizador de consultas.
> >
> > Lo he metido cada select en una tabla temporal sin hacer uniones y


tarda
> > igual.
> >
> > hay alguna manera de que tarde menos.
> >
> > muchas gracias
> >
> >
>
>


Respuesta Responder a este mensaje
#7 reo
03/06/2004 - 19:25 | Informe spam
si te refieres a pulsar en el menu consulta a la opcion realizar un analisis
de indice , me da:

No se sugirió ningún índice por uno de los siguientes motivos:
1. Las tablas tenían menos de 10 páginas de datos.
2. Ya existen los índices.
3. Sólo mejoraría el rendimiento de un índice agrupado.

otra cosa , por si ayuda a algo, si no pongo los filtros campo2='555'
tengo que me salen despues de unos 10 minutos mas de 400000 registros

tengo actualizar estadisticas automaticamente y crear estadisticas
automaticamente activados.
Es un servidor con algo de carga.


"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió
en el mensaje news:
Es el tiempo que tarda en poner todo en memoria.
No creo que puedas mejorar este tiempo si no puedes cambiar la consulta o
mejorarla.
12 segundos es una eternidad si los volúmenes son pequeños.
Ejecutaste el asistente tal como te comento Javier?
Las estadísticas estan actualizadas ?
Tienes la creacion automática de estadísticas activada?

Saludos

Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"reo" wrote in message
news:%23JMq$
> no tenia ningun indice, he puesto a todas las tablas y ahora
> en la primera vez que la ejecuto me tarda 12 segundos y si la haga una
> segunda vez tarda 2 segundos
> es decir, he mejorado, pero como puedo hacer que la primera tambien


tarde
2
> segundos.
>
> muchas gracias
>
>
> "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
escribió
> en el mensaje news:%
> > Puedes intentar creando cover index sobre las tablas
> > C (campo1,campo2)
> > D (campo1,campo2)
> > A1 (campo1,campo2,campo3)
> > CA(campo2,campo1,campo4,campo5)
> >
> >
> > Por otro lado todo esto es muy relativo ya que no sabemos nada del
diseño
> de
> > las tablas, no sabemos nada de los indices existentes, ni de la
> cardinalidad
> > de la información. Tal como te dijo Javier el Index Tuning Wizard es


una
> de
> > las mejores alternativas.
> >
> > Además yo cambiaría de sintaxis
> >
> > select
> > da1.campo4,
> > da1.campo5,
> > a1.campo1,
> > c.campo2,
> > d.campo2
> > from
> > da1,
> > a1,
> > c,
> > d
> > where
> > da1.campo1¡.campo1
> > and da1.campo2='555'
> > and c.campo1¡.campo2
> > and d.campo1¡.campo3
> >
> >
> >
> > select
> > da1.campo4,
> > da1.campo5,
> > d1.campo1, -- lo cambie
> > c.campo2,
> > d.campo2
> > from
> > da1
> > join a1 on da1.campo1¡.campo1
> > join c on c.campo1¡.campo2
> > join d on d.campo1¡.campo3
> > where
> > da1.campo2='555'
> >
> >
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> >
> > "reo" wrote in message
> > news:
> > > tengo el select:
> > >
> > > select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
> > > from da1,a1,c,d
> > > where da1.campo1¡.campo1 and da1.campo2='555' and


c.campo1¡.campo2
> and
> > > d.campo1¡.campo3
> > > union all
> > > select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
> > > from df1,f1,c,d
> > > where df1.campo1ñ.campo1 and df1.campo2='555' and


c.campo1ñ.campo2
> and
> > > d.campo1ñ.campo3
> > > union all
> > > select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
> > > from do1,o1,c,d
> > > where da1.campo1=o1.campo1 and do1.campo2='555' and


c.campo1=o1.campo2
> and
> > > d.campo1=o1.campo3
> > > union all
> > > select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
> > > from dt1,t1,c,d
> > > where dt1.campo1=t1.campo1 and dt1.campo2='555' and c.campo1=t1.camp


o2
> and
> > > d.campo1=t1.campo3
> > >
> > > esto me tarda 15 segundos desde el analizador de consultas.
> > >
> > > Lo he metido cada select en una tabla temporal sin hacer uniones y
tarda
> > > igual.
> > >
> > > hay alguna manera de que tarde menos.
> > >
> > > muchas gracias
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#8 Jose Mariano Alvarez \(MUG\)
03/06/2004 - 20:09 | Informe spam
La verdad es que los nombres de campo ni los de las tablas ayudan mucho a
interpretar tu modelo.
Tampoco se si hay mejores alternativas.
Por que no pasas un queryplan (set showplan_all) en un adjunto de texto
(notepad) para ver el plan que tienes.


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar



"reo" wrote in message
news:OE$zM$
si te refieres a pulsar en el menu consulta a la opcion realizar un


analisis
de indice , me da:

No se sugirió ningún índice por uno de los siguientes motivos:
1. Las tablas tenían menos de 10 páginas de datos.
2. Ya existen los índices.
3. Sólo mejoraría el rendimiento de un índice agrupado.

otra cosa , por si ayuda a algo, si no pongo los filtros campo2='555'
tengo que me salen despues de unos 10 minutos mas de 400000 registros

tengo actualizar estadisticas automaticamente y crear estadisticas
automaticamente activados.
Es un servidor con algo de carga.


"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>


escribió
en el mensaje news:
> Es el tiempo que tarda en poner todo en memoria.
> No creo que puedas mejorar este tiempo si no puedes cambiar la consulta


o
> mejorarla.
> 12 segundos es una eternidad si los volúmenes son pequeños.
> Ejecutaste el asistente tal como te comento Javier?
> Las estadísticas estan actualizadas ?
> Tienes la creacion automática de estadísticas activada?
>
> Saludos
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
>
> "reo" wrote in message
> news:%23JMq$
> > no tenia ningun indice, he puesto a todas las tablas y ahora
> > en la primera vez que la ejecuto me tarda 12 segundos y si la haga una
> > segunda vez tarda 2 segundos
> > es decir, he mejorado, pero como puedo hacer que la primera tambien
tarde
> 2
> > segundos.
> >
> > muchas gracias
> >
> >
> > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
> escribió
> > en el mensaje news:%
> > > Puedes intentar creando cover index sobre las tablas
> > > C (campo1,campo2)
> > > D (campo1,campo2)
> > > A1 (campo1,campo2,campo3)
> > > CA(campo2,campo1,campo4,campo5)
> > >
> > >
> > > Por otro lado todo esto es muy relativo ya que no sabemos nada del
> diseño
> > de
> > > las tablas, no sabemos nada de los indices existentes, ni de la
> > cardinalidad
> > > de la información. Tal como te dijo Javier el Index Tuning Wizard es
una
> > de
> > > las mejores alternativas.
> > >
> > > Además yo cambiaría de sintaxis
> > >
> > > select
> > > da1.campo4,
> > > da1.campo5,
> > > a1.campo1,
> > > c.campo2,
> > > d.campo2
> > > from
> > > da1,
> > > a1,
> > > c,
> > > d
> > > where
> > > da1.campo1¡.campo1
> > > and da1.campo2='555'
> > > and c.campo1¡.campo2
> > > and d.campo1¡.campo3
> > >
> > >
> > >
> > > select
> > > da1.campo4,
> > > da1.campo5,
> > > d1.campo1, -- lo cambie
> > > c.campo2,
> > > d.campo2
> > > from
> > > da1
> > > join a1 on da1.campo1¡.campo1
> > > join c on c.campo1¡.campo2
> > > join d on d.campo1¡.campo3
> > > where
> > > da1.campo2='555'
> > >
> > >
> > >
> > > Jose Mariano Alvarez
> > > Comunidad de base de datos
> > > Grupo de Usuarios Microsoft
> > > www.mug.org.ar
> > >
> > >
> > >
> > > "reo" wrote in message
> > > news:
> > > > tengo el select:
> > > >
> > > > select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
> > > > from da1,a1,c,d
> > > > where da1.campo1¡.campo1 and da1.campo2='555' and
c.campo1¡.campo2
> > and
> > > > d.campo1¡.campo3
> > > > union all
> > > > select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
> > > > from df1,f1,c,d
> > > > where df1.campo1ñ.campo1 and df1.campo2='555' and
c.campo1ñ.campo2
> > and
> > > > d.campo1ñ.campo3
> > > > union all
> > > > select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
> > > > from do1,o1,c,d
> > > > where da1.campo1=o1.campo1 and do1.campo2='555' and
c.campo1=o1.campo2
> > and
> > > > d.campo1=o1.campo3
> > > > union all
> > > > select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
> > > > from dt1,t1,c,d
> > > > where dt1.campo1=t1.campo1 and dt1.campo2='555' and


c.campo1=t1.camp
o2
> > and
> > > > d.campo1=t1.campo3
> > > >
> > > > esto me tarda 15 segundos desde el analizador de consultas.
> > > >
> > > > Lo he metido cada select en una tabla temporal sin hacer uniones y
> tarda
> > > > igual.
> > > >
> > > > hay alguna manera de que tarde menos.
> > > >
> > > > muchas gracias
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#9 Jose Mariano Alvarez \(MUG\)
06/06/2004 - 08:35 | Informe spam
El primero de los select del union quedaría así si lo acomodo un poco:

SELECT
a.fecha AS fecha,
'A' as tipo,
p.rsocial,
d.nalbaran AS ndocumento,
a.ncliente,
d.cantidad,
d.pvp,
d.importe,
d.descuento,
d.descuento2,
d.descuento3,
a.divisa,
div.ndecimales
FROM
DETALLES_ALB_CLI AS d
join albaranes_cli AS a on a.nalbaran = d.nalbaran
join clientes as p on p.ncliente=a.ncliente
join divisas as div on div.codigo=a.divisa
WHERE
d.referencia = '00012555'
AND a.nfactura IS NULL


d.referencia = '00012555' puede ser usado como un SARG por lo cual podrías
poner un índice si la cardinalidad es buena (presumo debería ser así).

Ahora esta haciendo un SCAN del indice y casi seguro puede eliminarse.

Lo mismo ocurre en cada uno de los select del UNION.


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"reo" wrote in message
news:
bueno realmente el select es:

SELECT a.fecha AS fecha, 'A' as tipo,p.rsocial,d.nalbaran AS
ndocumento,a.ncliente, d.cantidad,d.pvp, d.importe,
d.descuento,d.descuento2,d.descuento3,a.divisa,div.ndecimales
FROM DETALLES_ALB_CLI AS d, albaranes_cli AS a,clientes as p,divisas as


div
WHERE d.referencia = '00012555' AND a.nalbaran = d.nalbaran AND a.nfactura
IS NULL and p.ncliente=a.ncliente and div.codigo=a.divisa
UNION all
SELECT f.fecha AS fecha,'F' as tipo,p.rsocial, d.nfactura AS
ndocumento,f.ncliente, d.cantidad,d.pvp, d.importe,
d.descuento,d.descuento2,d.descuento3,f.divisa,div.ndecimales
FROM DETALLES_FAC_CLI AS d, facturas_cli AS f,clientes as p,divisas as div
WHERE d.referencia = '00012555' AND f.nfactura = d.nfactura and
p.ncliente=f.ncliente and div.codigo=f.divisa
UNION all
select o.fecha as fecha,'O' as tipo,cl.rsocial,o.norden as
ndocumento,c.ncliente,d.cantidad,d.pvp,d.importe,d.descuento,0 as
descuento2,0 as descuento3,o.divisa,div.ndecimales
from detalles_orden as d,ordenes as o,incidencias as i,centros as


c,clientes
as cl,divisas as div
where o.nincidencia=i.nincidencia and i.ncentro=c.ncentro and
c.ncliente=cl.ncliente and d.referencia='00012555'
and o.norden=d.norden and div.codigo=o.divisa and o.nfactura is null
UNION all
select t.fecha as fecha,'T' as tipo,c.rsocial,t.nticket as
ndocumento,t.ncliente,d.cantidad,d.pvp,d.importe,d.descuento,0 as
descuento2,0 as descuento3,t.divisa,div.ndecimales
from detalles_tickets as d,tickets as t left outer join clientes as c on
t.ncliente=c.ncliente,divisas as div
where d.nticket=t.nticket and div.codigo=t.divisa and t.nfactura is null


and
d.referencia='00012555'
ORDER BY fecha DESC
y el plan esta en el fichero adjunto


"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>


escribió
en el mensaje news:
> La verdad es que los nombres de campo ni los de las tablas ayudan mucho


a
> interpretar tu modelo.
> Tampoco se si hay mejores alternativas.
> Por que no pasas un queryplan (set showplan_all) en un adjunto de texto
> (notepad) para ver el plan que tienes.
>
>
> Jose Mariano Alvarez
> Comunidad de base de datos
> Grupo de Usuarios Microsoft
> www.mug.org.ar
>
>
>
> "reo" wrote in message
> news:OE$zM$
> > si te refieres a pulsar en el menu consulta a la opcion realizar un
> analisis
> > de indice , me da:
> >
> > No se sugirió ningún índice por uno de los siguientes motivos:
> > 1. Las tablas tenían menos de 10 páginas de datos.
> > 2. Ya existen los índices.
> > 3. Sólo mejoraría el rendimiento de un índice agrupado.
> >
> > otra cosa , por si ayuda a algo, si no pongo los filtros campo2='555'
> > tengo que me salen despues de unos 10 minutos mas de 400000 registros
> >
> > tengo actualizar estadisticas automaticamente y crear estadisticas
> > automaticamente activados.
> > Es un servidor con algo de carga.
> >
> >
> > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
> escribió
> > en el mensaje news:
> > > Es el tiempo que tarda en poner todo en memoria.
> > > No creo que puedas mejorar este tiempo si no puedes cambiar la
consulta
> o
> > > mejorarla.
> > > 12 segundos es una eternidad si los volúmenes son pequeños.
> > > Ejecutaste el asistente tal como te comento Javier?
> > > Las estadísticas estan actualizadas ?
> > > Tienes la creacion automática de estadísticas activada?
> > >
> > > Saludos
> > >
> > > Jose Mariano Alvarez
> > > Comunidad de base de datos
> > > Grupo de Usuarios Microsoft
> > > www.mug.org.ar
> > >
> > >
> > >
> > > "reo" wrote in message
> > > news:%23JMq$
> > > > no tenia ningun indice, he puesto a todas las tablas y ahora
> > > > en la primera vez que la ejecuto me tarda 12 segundos y si la haga
una
> > > > segunda vez tarda 2 segundos
> > > > es decir, he mejorado, pero como puedo hacer que la primera


tambien

> > tarde
> > > 2
> > > > segundos.
> > > >
> > > > muchas gracias
> > > >
> > > >
> > > > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* *


mug.org.ar>
> > > escribió
> > > > en el mensaje news:%
> > > > > Puedes intentar creando cover index sobre las tablas
> > > > > C (campo1,campo2)
> > > > > D (campo1,campo2)
> > > > > A1 (campo1,campo2,campo3)
> > > > > CA(campo2,campo1,campo4,campo5)
> > > > >
> > > > >
> > > > > Por otro lado todo esto es muy relativo ya que no sabemos nada


del
> > > diseño
> > > > de
> > > > > las tablas, no sabemos nada de los indices existentes, ni de la
> > > > cardinalidad
> > > > > de la información. Tal como te dijo Javier el Index Tuning


Wizard
es
> > una
> > > > de
> > > > > las mejores alternativas.
> > > > >
> > > > > Además yo cambiaría de sintaxis
> > > > >
> > > > > select
> > > > > da1.campo4,
> > > > > da1.campo5,
> > > > > a1.campo1,
> > > > > c.campo2,
> > > > > d.campo2
> > > > > from
> > > > > da1,
> > > > > a1,
> > > > > c,
> > > > > d
> > > > > where
> > > > > da1.campo1¡.campo1
> > > > > and da1.campo2='555'
> > > > > and c.campo1¡.campo2
> > > > > and d.campo1¡.campo3
> > > > >
> > > > >
> > > > >
> > > > > select
> > > > > da1.campo4,
> > > > > da1.campo5,
> > > > > d1.campo1, -- lo cambie
> > > > > c.campo2,
> > > > > d.campo2
> > > > > from
> > > > > da1
> > > > > join a1 on da1.campo1¡.campo1
> > > > > join c on c.campo1¡.campo2
> > > > > join d on d.campo1¡.campo3
> > > > > where
> > > > > da1.campo2='555'
> > > > >
> > > > >
> > > > >
> > > > > Jose Mariano Alvarez
> > > > > Comunidad de base de datos
> > > > > Grupo de Usuarios Microsoft
> > > > > www.mug.org.ar
> > > > >
> > > > >
> > > > >
> > > > > "reo" wrote in message
> > > > > news:
> > > > > > tengo el select:
> > > > > >
> > > > > > select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
> > > > > > from da1,a1,c,d
> > > > > > where da1.campo1¡.campo1 and da1.campo2='555' and
> > c.campo1¡.campo2
> > > > and
> > > > > > d.campo1¡.campo3
> > > > > > union all
> > > > > > select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
> > > > > > from df1,f1,c,d
> > > > > > where df1.campo1ñ.campo1 and df1.campo2='555' and
> > c.campo1ñ.campo2
> > > > and
> > > > > > d.campo1ñ.campo3
> > > > > > union all
> > > > > > select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
> > > > > > from do1,o1,c,d
> > > > > > where da1.campo1=o1.campo1 and do1.campo2='555' and
> > c.campo1=o1.campo2
> > > > and
> > > > > > d.campo1=o1.campo3
> > > > > > union all
> > > > > > select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
> > > > > > from dt1,t1,c,d
> > > > > > where dt1.campo1=t1.campo1 and dt1.campo2='555' and
> c.campo1=t1.camp
> > o2
> > > > and
> > > > > > d.campo1=t1.campo3
> > > > > >
> > > > > > esto me tarda 15 segundos desde el analizador de consultas.
> > > > > >
> > > > > > Lo he metido cada select en una tabla temporal sin hacer


uniones
y
> > > tarda
> > > > > > igual.
> > > > > >
> > > > > > hay alguna manera de que tarde menos.
> > > > > >
> > > > > > muchas gracias
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>








Revisado por AVG

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 03/06/2004
Respuesta Responder a este mensaje
#10 reo
07/06/2004 - 10:20 | Informe spam
he comparado el select con el join como dices , con el select que os pase y
el del join tarda 21 segundo y el normal 11.

"Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar> escribió
en el mensaje news:
El primero de los select del union quedaría así si lo acomodo un poco:

SELECT
a.fecha AS fecha,
'A' as tipo,
p.rsocial,
d.nalbaran AS ndocumento,
a.ncliente,
d.cantidad,
d.pvp,
d.importe,
d.descuento,
d.descuento2,
d.descuento3,
a.divisa,
div.ndecimales
FROM
DETALLES_ALB_CLI AS d
join albaranes_cli AS a on a.nalbaran = d.nalbaran
join clientes as p on p.ncliente=a.ncliente
join divisas as div on div.codigo=a.divisa
WHERE
d.referencia = '00012555'
AND a.nfactura IS NULL


d.referencia = '00012555' puede ser usado como un SARG por lo cual


podrías
poner un índice si la cardinalidad es buena (presumo debería ser así).

Ahora esta haciendo un SCAN del indice y casi seguro puede eliminarse.

Lo mismo ocurre en cada uno de los select del UNION.


Jose Mariano Alvarez
Comunidad de base de datos
Grupo de Usuarios Microsoft
www.mug.org.ar


"reo" wrote in message
news:
> bueno realmente el select es:
>
> SELECT a.fecha AS fecha, 'A' as tipo,p.rsocial,d.nalbaran AS
> ndocumento,a.ncliente, d.cantidad,d.pvp, d.importe,
> d.descuento,d.descuento2,d.descuento3,a.divisa,div.ndecimales
> FROM DETALLES_ALB_CLI AS d, albaranes_cli AS a,clientes as p,divisas as
div
> WHERE d.referencia = '00012555' AND a.nalbaran = d.nalbaran AND


a.nfactura
> IS NULL and p.ncliente=a.ncliente and div.codigo=a.divisa
> UNION all
> SELECT f.fecha AS fecha,'F' as tipo,p.rsocial, d.nfactura AS
> ndocumento,f.ncliente, d.cantidad,d.pvp, d.importe,
> d.descuento,d.descuento2,d.descuento3,f.divisa,div.ndecimales
> FROM DETALLES_FAC_CLI AS d, facturas_cli AS f,clientes as p,divisas as


div
> WHERE d.referencia = '00012555' AND f.nfactura = d.nfactura and
> p.ncliente=f.ncliente and div.codigo=f.divisa
> UNION all
> select o.fecha as fecha,'O' as tipo,cl.rsocial,o.norden as
> ndocumento,c.ncliente,d.cantidad,d.pvp,d.importe,d.descuento,0 as
> descuento2,0 as descuento3,o.divisa,div.ndecimales
> from detalles_orden as d,ordenes as o,incidencias as i,centros as
c,clientes
> as cl,divisas as div
> where o.nincidencia=i.nincidencia and i.ncentro=c.ncentro and
> c.ncliente=cl.ncliente and d.referencia='00012555'
> and o.norden=d.norden and div.codigo=o.divisa and o.nfactura is null
> UNION all
> select t.fecha as fecha,'T' as tipo,c.rsocial,t.nticket as
> ndocumento,t.ncliente,d.cantidad,d.pvp,d.importe,d.descuento,0 as
> descuento2,0 as descuento3,t.divisa,div.ndecimales
> from detalles_tickets as d,tickets as t left outer join clientes as c on
> t.ncliente=c.ncliente,divisas as div
> where d.nticket=t.nticket and div.codigo=t.divisa and t.nfactura is null
and
> d.referencia='00012555'
> ORDER BY fecha DESC
> y el plan esta en el fichero adjunto
>
>
> "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
escribió
> en el mensaje news:
> > La verdad es que los nombres de campo ni los de las tablas ayudan


mucho
a
> > interpretar tu modelo.
> > Tampoco se si hay mejores alternativas.
> > Por que no pasas un queryplan (set showplan_all) en un adjunto de


texto
> > (notepad) para ver el plan que tienes.
> >
> >
> > Jose Mariano Alvarez
> > Comunidad de base de datos
> > Grupo de Usuarios Microsoft
> > www.mug.org.ar
> >
> >
> >
> > "reo" wrote in message
> > news:OE$zM$
> > > si te refieres a pulsar en el menu consulta a la opcion realizar un
> > analisis
> > > de indice , me da:
> > >
> > > No se sugirió ningún índice por uno de los siguientes motivos:
> > > 1. Las tablas tenían menos de 10 páginas de datos.
> > > 2. Ya existen los índices.
> > > 3. Sólo mejoraría el rendimiento de un índice agrupado.
> > >
> > > otra cosa , por si ayuda a algo, si no pongo los filtros


campo2='555'
> > > tengo que me salen despues de unos 10 minutos mas de 400000


registros
> > >
> > > tengo actualizar estadisticas automaticamente y crear estadisticas
> > > automaticamente activados.
> > > Es un servidor con algo de carga.
> > >
> > >
> > > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* * mug.org.ar>
> > escribió
> > > en el mensaje news:
> > > > Es el tiempo que tarda en poner todo en memoria.
> > > > No creo que puedas mejorar este tiempo si no puedes cambiar la
> consulta
> > o
> > > > mejorarla.
> > > > 12 segundos es una eternidad si los volúmenes son pequeños.
> > > > Ejecutaste el asistente tal como te comento Javier?
> > > > Las estadísticas estan actualizadas ?
> > > > Tienes la creacion automática de estadísticas activada?
> > > >
> > > > Saludos
> > > >
> > > > Jose Mariano Alvarez
> > > > Comunidad de base de datos
> > > > Grupo de Usuarios Microsoft
> > > > www.mug.org.ar
> > > >
> > > >
> > > >
> > > > "reo" wrote in message
> > > > news:%23JMq$
> > > > > no tenia ningun indice, he puesto a todas las tablas y ahora
> > > > > en la primera vez que la ejecuto me tarda 12 segundos y si la


haga
> una
> > > > > segunda vez tarda 2 segundos
> > > > > es decir, he mejorado, pero como puedo hacer que la primera
tambien
>
> > > tarde
> > > > 2
> > > > > segundos.
> > > > >
> > > > > muchas gracias
> > > > >
> > > > >
> > > > > "Jose Mariano Alvarez (MUG)" <jose.alvarez * *Arroba* *
mug.org.ar>
> > > > escribió
> > > > > en el mensaje news:%
> > > > > > Puedes intentar creando cover index sobre las tablas
> > > > > > C (campo1,campo2)
> > > > > > D (campo1,campo2)
> > > > > > A1 (campo1,campo2,campo3)
> > > > > > CA(campo2,campo1,campo4,campo5)
> > > > > >
> > > > > >
> > > > > > Por otro lado todo esto es muy relativo ya que no sabemos nada
del
> > > > diseño
> > > > > de
> > > > > > las tablas, no sabemos nada de los indices existentes, ni de


la
> > > > > cardinalidad
> > > > > > de la información. Tal como te dijo Javier el Index Tuning
Wizard
> es
> > > una
> > > > > de
> > > > > > las mejores alternativas.
> > > > > >
> > > > > > Además yo cambiaría de sintaxis
> > > > > >
> > > > > > select
> > > > > > da1.campo4,
> > > > > > da1.campo5,
> > > > > > a1.campo1,
> > > > > > c.campo2,
> > > > > > d.campo2
> > > > > > from
> > > > > > da1,
> > > > > > a1,
> > > > > > c,
> > > > > > d
> > > > > > where
> > > > > > da1.campo1¡.campo1
> > > > > > and da1.campo2='555'
> > > > > > and c.campo1¡.campo2
> > > > > > and d.campo1¡.campo3
> > > > > >
> > > > > >
> > > > > >
> > > > > > select
> > > > > > da1.campo4,
> > > > > > da1.campo5,
> > > > > > d1.campo1, -- lo cambie
> > > > > > c.campo2,
> > > > > > d.campo2
> > > > > > from
> > > > > > da1
> > > > > > join a1 on da1.campo1¡.campo1
> > > > > > join c on c.campo1¡.campo2
> > > > > > join d on d.campo1¡.campo3
> > > > > > where
> > > > > > da1.campo2='555'
> > > > > >
> > > > > >
> > > > > >
> > > > > > Jose Mariano Alvarez
> > > > > > Comunidad de base de datos
> > > > > > Grupo de Usuarios Microsoft
> > > > > > www.mug.org.ar
> > > > > >
> > > > > >
> > > > > >
> > > > > > "reo" wrote in message
> > > > > > news:
> > > > > > > tengo el select:
> > > > > > >
> > > > > > > select da1.campo4,da1.campo5,a1.campo1,c.campo2,d.campo2
> > > > > > > from da1,a1,c,d
> > > > > > > where da1.campo1¡.campo1 and da1.campo2='555' and
> > > c.campo1¡.campo2
> > > > > and
> > > > > > > d.campo1¡.campo3
> > > > > > > union all
> > > > > > > select df1.campo4,df1.campo5,f1.campo1,c.campo2,d.campo2
> > > > > > > from df1,f1,c,d
> > > > > > > where df1.campo1ñ.campo1 and df1.campo2='555' and
> > > c.campo1ñ.campo2
> > > > > and
> > > > > > > d.campo1ñ.campo3
> > > > > > > union all
> > > > > > > select do1.campo4,do1.campo5,o1.campo1,c.campo2,d.campo2
> > > > > > > from do1,o1,c,d
> > > > > > > where da1.campo1=o1.campo1 and do1.campo2='555' and
> > > c.campo1=o1.campo2
> > > > > and
> > > > > > > d.campo1=o1.campo3
> > > > > > > union all
> > > > > > > select dt1.campo4,dt1.campo5,t1.campo1,c.campo2,d.campo2
> > > > > > > from dt1,t1,c,d
> > > > > > > where dt1.campo1=t1.campo1 and dt1.campo2='555' and
> > c.campo1=t1.camp
> > > o2
> > > > > and
> > > > > > > d.campo1=t1.campo3
> > > > > > >
> > > > > > > esto me tarda 15 segundos desde el analizador de consultas.
> > > > > > >
> > > > > > > Lo he metido cada select en una tabla temporal sin hacer
uniones
> y
> > > > tarda
> > > > > > > igual.
> > > > > > >
> > > > > > > hay alguna manera de que tarde menos.
> > > > > > >
> > > > > > > muchas gracias
> > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>
>



Revisado por AVG

Checked by AVG anti-virus system (http://www.grisoft.com).
Version: 6.0.698 / Virus Database: 455 - Release Date: 03/06/2004


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