Join y Subquery

29/11/2005 - 09:32 por marcwentink | Informe spam
Tengo que hacer un Join de dos tablas A y B, pero B es muy muy grande.
Entonces puedo hacer:

Select * From A,B Where A.ForiegnB_Id = B.Id

Pero yo sé algo mas de tabla B, yo sé que solo uso un muy pequeña
parte de B, entonces quirero haces algo como:

Select * From A,(Select * From B Where Id IN ('Id1', 'Id2', 'Id3'))
Where A.ForiegnB_Id = B.Id

eso hago para prevenir que el systema va a hacer calculaciones
inutiles.

Pero tengo unas preguntas:

1. Eso no es ya arreglado en SQL por ejemplo cuando yo hago:

Select * From A,B Where A.ForiegnB_Id = B.Id And A.ForiegnB_Id IN
('Id1', 'Id2', 'Id3')

No el systema ya sabes que no hacer un Join de todo A con todo B?

2. Come yo llamo "B" en

Select * From A,(Select * From B Where Id IN ('Id1', 'Id2', 'Id3'))
Where A.ForiegnB_Id = B.Id

Porque no es verdad "B" pero el resultado del subquery

(Select * From B Where Id IN ('Id1', 'Id2', 'Id3')


3 Hay otras maneras para hacer lo que quiero? Un View o algo?

Preguntas similare

Leer las respuestas

#1 Carlos Sacristán
29/11/2005 - 09:42 | Informe spam
Prueba a hacer el JOIN normal poniendo en la cláusula WHERE los campos
por los que estás filtrando, miras el plan de ejecución y verás que el motor
lo está haciendo correctamente...


Select *
From A INNER JOIN B ON A.ForiegnB_Id = B.Id
Where Id IN ('Id1', 'Id2', 'Id3')


Un saludo

-
"Sólo sé que no sé nada. " (Sócrates)

escribió en el mensaje
news:
Tengo que hacer un Join de dos tablas A y B, pero B es muy muy grande.
Entonces puedo hacer:

Select * From A,B Where A.ForiegnB_Id = B.Id

Pero yo sé algo mas de tabla B, yo sé que solo uso un muy pequeña
parte de B, entonces quirero haces algo como:

Select * From A,(Select * From B Where Id IN ('Id1', 'Id2', 'Id3'))
Where A.ForiegnB_Id = B.Id

eso hago para prevenir que el systema va a hacer calculaciones
inutiles.

Pero tengo unas preguntas:

1. Eso no es ya arreglado en SQL por ejemplo cuando yo hago:

Select * From A,B Where A.ForiegnB_Id = B.Id And A.ForiegnB_Id IN
('Id1', 'Id2', 'Id3')

No el systema ya sabes que no hacer un Join de todo A con todo B?

2. Come yo llamo "B" en

Select * From A,(Select * From B Where Id IN ('Id1', 'Id2', 'Id3'))
Where A.ForiegnB_Id = B.Id

Porque no es verdad "B" pero el resultado del subquery

(Select * From B Where Id IN ('Id1', 'Id2', 'Id3')


3 Hay otras maneras para hacer lo que quiero? Un View o algo?
Respuesta Responder a este mensaje
#2 marcwentink
29/11/2005 - 09:42 | Informe spam
Unas data mas, es que A tiene algo como 100 000 records, B tiene algo
como 5 000 000 records, pero ('Id1', 'Id2', 'Id3') consiste de nada mas
que 100 Id's
Respuesta Responder a este mensaje
#3 Miguel Egea
29/11/2005 - 11:40 | Informe spam
Lo normal es que con lo que te dice Carlos funcione mejor, sin embargo, en
algunas ocasiones yo he utilizado la opción que proponias, generalmente si
son muchas las tablas que hay en el from con dos solamente, es muy problable
que lo mejor sea la sintaxis que te propone carlos, el optimizador de
consultas es bastante bueo y te resolverá ese problema.

wrote in message
news:
Unas data mas, es que A tiene algo como 100 000 records, B tiene algo
como 5 000 000 records, pero ('Id1', 'Id2', 'Id3') consiste de nada mas
que 100 Id's

Respuesta Responder a este mensaje
#4 Alejandro Mesa
29/11/2005 - 16:45 | Informe spam
Que tal si comparas los planes de ejecucion que sql server usa para cada
sentencia?

En el caso de "inner join" (no asi para outer join), puedes especificar esa
condicion en el "ON", pero por legibilidad, yo prefiero ponerla en el
"where". Voy ha usar la sentencia que posteo Carlos.

Select *
From A INNER JOIN B ON A.ForiegnB_Id = B.Id
and B.Id IN ('Id1', 'Id2', 'Id3')

Veamos cuales son los planes seleccionados por sql server.


AMB

"" wrote:

Unas data mas, es que A tiene algo como 100 000 records, B tiene algo
como 5 000 000 records, pero ('Id1', 'Id2', 'Id3') consiste de nada mas
que 100 Id's


email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida