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

#1 Javier Loria
03/06/2004 - 14:14 | Informe spam
Hola:
No veo muchas alternativas.
a) Indices: Usando el Analizador de Consultas ejecuta el Asistente para
Sugerir Indices.
b) Vista Materializada: Creas una Vista que tenga como columnas los
campos Campo2, Campo1, Campo4 y Campo5) y que provenga e las tablas DA1,
DF1, DO1 Y DT1 y que sobre esta vista se construya un indice sobre todos los
campos. (Esta depende de si tiene sentido en tu diseno de tablas esto es si
las filas que estan en DA1, no estan en DF1, etc).
Una consulta de cuantas filas estamos hablando en cada tabla?
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
reo escribio:
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
#2 reo
03/06/2004 - 16:16 | Informe spam
yo pienso que el problema es que cada tabla tiene tropecientas filas(sin
filtros) y que al poner esta select se aumenta todavia mas
aunque en el resultado solamente salen 163 filas


"Javier Loria" escribió en el mensaje
news:
Hola:
No veo muchas alternativas.
a) Indices: Usando el Analizador de Consultas ejecuta el Asistente


para
Sugerir Indices.
b) Vista Materializada: Creas una Vista que tenga como columnas los
campos Campo2, Campo1, Campo4 y Campo5) y que provenga e las tablas DA1,
DF1, DO1 Y DT1 y que sobre esta vista se construya un indice sobre todos


los
campos. (Esta depende de si tiene sentido en tu diseno de tablas esto es


si
las filas que estan en DA1, no estan en DF1, etc).
Una consulta de cuantas filas estamos hablando en cada tabla?
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
reo escribio:
> 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
#3 reo
03/06/2004 - 16:20 | Informe spam
la alternativa de indices 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.

y la seguna alternativa no se como hacerla, ya que nunca he trabajado con
vistas,
ademas de dice que no se permiten union , ni order by
¿como se haria?

"Javier Loria" escribió en el mensaje
news:
Hola:
No veo muchas alternativas.
a) Indices: Usando el Analizador de Consultas ejecuta el Asistente


para
Sugerir Indices.
b) Vista Materializada: Creas una Vista que tenga como columnas los
campos Campo2, Campo1, Campo4 y Campo5) y que provenga e las tablas DA1,
DF1, DO1 Y DT1 y que sobre esta vista se construya un indice sobre todos


los
campos. (Esta depende de si tiene sentido en tu diseno de tablas esto es


si
las filas que estan en DA1, no estan en DF1, etc).
Una consulta de cuantas filas estamos hablando en cada tabla?
Saludos,


Javier Loria
Costa Rica
Se aprecia la inclusion de DDL (CREATE, INSERTS, etc.)
que pueda ser copiado y pegado al Query Analizer.
La version de SQL y Service Pack tambien ayuda.
reo escribio:
> 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
#4 Jose Mariano Alvarez \(MUG\)
03/06/2004 - 18:06 | Informe spam
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
#5 reo
03/06/2004 - 18:28 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida