SQL - optimización de consulta SQL

 
Vista:
Imágen de perfil de Alberto

optimización de consulta SQL

Publicado por Alberto (3 intervenciones) el 02/04/2015 18:39:49
Buen día, tengo esta pequeña duda sobre optimizar SQL

tengo este código:

create table r1
(
a int,
b int,
c int,
constraint pkr1 primary key (a));

create table r2
(
x int,
y int,
z int,
a int,
constraint pkr2 primary key (x),
constraint fkr2 foreign key (a) references r1);

inicialmente cree esta consulta sql:

select r1.a,sum(r2.z) from r1,r2
where r1.a = r2.a and r1.b=5 and r2.y=10
group by r1.a order by r1.a

para optimizar la consulta y que consuma menos recursos se creo este otro sql:

select A.a,sum(B.z) from (select a from r1 where b=5) A, (select a,z from r2 where y=10) B
where A.a=B.a
group by A.a order by A.a

la he revisado para ver si es posible optimizarla aun mas pero ya no veo como, alguno cree que sea posible optimizarla aun mas o ya para esta consulta en especifico no es posible?

Saludos
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias
Val: 2.542
Oro
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

optimización de consulta SQL

Publicado por Isaias (1921 intervenciones) el 05/04/2015 22:06:53
¿En que motor de base de datos?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 806
Bronce
Ha mantenido su posición en SQL (en relación al último mes)
Gráfica de SQL

optimización de consulta SQL

Publicado por leonardo_josue (1173 intervenciones) el 06/04/2015 19:33:43
Hola Alberto:

Por lo general, en todos los DBMS's es mejor utilizar JOIN's explícitos en lugar de listar las tablas en el FROM y hacer uniones implícitas, ya que los JOIN's utilizan algoritmos optimizados para dicho efecto, es decir, en lugar de hacer esto:

1
2
3
4
...
FROM tabla1, tabla2
WHERE tabla1.campo = tabla2.campo
...


es mejor hacer esto:

1
2
3
4
5
...
FROM tabla1
INNER JOIN tabla2
ON tabla1.campo = tabla2.campo
...

Además, la idea de hacer subconsultas, tal como lo haces en tu segunda consulta, suele ser aun más lenta. Tal como menciona Isaias, deberías comenzar por decirnos qué DBMS estás utilizando, pero en lo particular te diría que la manera más óptima para hacer la consulta es simplemente así:

1
2
3
4
5
6
SELECT r1.a, SUM(r2.z)
FROM r1
INNER JOIN r2 ON r1.a = r2.a
WHERE r1.b=5 and r2.y=10
GROUP BY r1.a
ORDER BY r1.a


Haz la prueba y nos comentas.

Saludos
Leo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

optimización de consulta SQL

Publicado por Alberto (3 intervenciones) el 06/04/2015 19:52:21
Voy a realizar la prueba, muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alberto

optimización de consulta SQL

Publicado por Alberto (3 intervenciones) el 06/04/2015 19:49:23
Para Postgres y Oracle
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar