Cual es la mejor manera de CONSTRUIR sentencias SELECT ?

30/09/2009 - 20:21 por Ernest | Informe spam
Hola amigos que tal como están ?

Tengo una consulta : Estoy comenzando en SQL SERVER y necesito saber cuál es
la mejor manera de construir las
sentencias SELECT.

Hasta el momento he trabajado mis consultas de la siguiente manera. (Usando
otras Bases de Datos) Ejemplo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a, cliente b
WHERE a.cod_cliente = b.cod_cliente
AND &&&&& Todas las condiciones que quiero. etc.

Pero parece que en SQL SERVER debería de ser de éste modo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a
INNER JOIN cliente b
ON a.cod_cliente = b.cod_cliente ;
WHERE &&&&& Todas las condiciones que quiero. etc.

La verdad, es que leí por allí que hacerlo de la primera forma
afecta el rendimiento.

Pero yo he trabajado en VFP 9.0 datos considerables y al contrario mis
queries han resultado más rápidos y eficientes
que los escritos usando el INNER JOIN que traía la aplicación por defaul.t
(Es una aplicación que se compró a terceros en la empresa donde laboro
construida en VFP 9.0).

Por eso, ahora que tengo que comenzar a trabajar en SQL SERVER me gustaría
saber, de acuerdo a su experiencia,
si en verdad afecta de manera sensible el rendimiento. Porque la verdad
considero mucho más fácil hacerlo
de la primera manera. La segunda me parece es Transact SQL.

No omito, comentarles que la aplicación que pienso hacer es pequeña por lo
que pienso utilizar la Versión Express
que soporta hasta 4 GB.

Les agradezco mucho su gran ayuda.

Preguntas similare

Leer las respuestas

#11 Ernest
02/10/2009 - 17:18 | Informe spam
Gracias Carlos por aclararme las cosas. No quisiera cansarlos con lo mismo
pero
de nuevo les agradezco a todos.

Efectivamente mi pregunta era si construir las sentencias en el WHERE
afectaba el performance
de SQL SERVER. Veo que tú concuerdas con la primera opinión que emitió
Rubén sobre que
no afecta en nada.

Ahora que es tan díficil que me expliques que son los planes de ejecución ?
Y porque decía aa que si afectaba ?

Sólo eso les pido de favor que me aclaren. O debo leer el libro primero ?

Gracias a todos de nuevo. Saludos !!!!



"Carlos Sacristan" escribió en el mensaje
news:
Esa no era la pregunta original de Ernest. Efectivamente en el WHERE no
puedes incluir sugerencias de combinación, pero la pregunta era si la
misma combinación de tablas, escrita en el JOIN o en el WHERE daba lo
mismo, y la respuesta, corta, es que sí.

Otra cosa es que metamos otra serie de variables como que qué tipo de
combinación estamos tratando, si queremos usar algún tipo de sugerencia o
similar.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
Con un where no se puede afectar la forma del join (hash,merge,etc) menos
si son joins remotos y no siempre el sql pasa los where a join bien.
"Carlos Sacristan" wrote in message
news:
No estoy de acuerdo, pero es fácil de comprobar echando un vistazo al
plan de ejecución de una instrucción construida con JOIN y la otra con
las condiciones de combinación en el WHERE.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
A simple vista parece que no pero usar where en vez de inner puede
afectar los planes de ejecucion.
"Ernest" <ernest_rdQUITAR wrote in message
news:
Hola amigos que tal como están ?

Tengo una consulta : Estoy comenzando en SQL SERVER y necesito saber
cuál es la mejor manera de construir las
sentencias SELECT.

Hasta el momento he trabajado mis consultas de la siguiente manera.
(Usando otras Bases de Datos) Ejemplo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a, cliente b
WHERE a.cod_cliente = b.cod_cliente
AND &&&&& Todas las condiciones que quiero. etc.

Pero parece que en SQL SERVER debería de ser de éste modo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a
INNER JOIN cliente b
ON a.cod_cliente = b.cod_cliente ;
WHERE &&&&& Todas las condiciones que quiero. etc.

La verdad, es que leí por allí que hacerlo de la primera forma
afecta el rendimiento.

Pero yo he trabajado en VFP 9.0 datos considerables y al contrario mis
queries han resultado más rápidos y eficientes
que los escritos usando el INNER JOIN que traía la aplicación por
defaul.t
(Es una aplicación que se compró a terceros en la empresa donde laboro
construida en VFP 9.0).

Por eso, ahora que tengo que comenzar a trabajar en SQL SERVER me
gustaría saber, de acuerdo a su experiencia,
si en verdad afecta de manera sensible el rendimiento. Porque la
verdad considero mucho más fácil hacerlo
de la primera manera. La segunda me parece es Transact SQL.

No omito, comentarles que la aplicación que pienso hacer es pequeña
por lo que pienso utilizar la Versión Express
que soporta hasta 4 GB.

Les agradezco mucho su gran ayuda.

















Respuesta Responder a este mensaje
#12 aa
03/10/2009 - 00:11 | Informe spam
El where si afecta ya que no es lo mismo hacer
select * from tabla a,table b
where a.campo1 = b.campo2 and
otras variables
and b.campo3 = 5

que hacer
select * from tabla a inner join table b
on a.campo1 = b.campo2 and b.campo3=5
where otras variables
ya que ahi el inner es mas rapido porque filtra antes.
Todo esto dependiendo de la cantidad de registros por supuesto.

"Carlos Sacristan" wrote in message
news:
Esa no era la pregunta original de Ernest. Efectivamente en el WHERE no
puedes incluir sugerencias de combinación, pero la pregunta era si la
misma combinación de tablas, escrita en el JOIN o en el WHERE daba lo
mismo, y la respuesta, corta, es que sí.

Otra cosa es que metamos otra serie de variables como que qué tipo de
combinación estamos tratando, si queremos usar algún tipo de sugerencia o
similar.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
Con un where no se puede afectar la forma del join (hash,merge,etc) menos
si son joins remotos y no siempre el sql pasa los where a join bien.
"Carlos Sacristan" wrote in message
news:
No estoy de acuerdo, pero es fácil de comprobar echando un vistazo al
plan de ejecución de una instrucción construida con JOIN y la otra con
las condiciones de combinación en el WHERE.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
A simple vista parece que no pero usar where en vez de inner puede
afectar los planes de ejecucion.
"Ernest" <ernest_rdQUITAR wrote in message
news:
Hola amigos que tal como están ?

Tengo una consulta : Estoy comenzando en SQL SERVER y necesito saber
cuál es la mejor manera de construir las
sentencias SELECT.

Hasta el momento he trabajado mis consultas de la siguiente manera.
(Usando otras Bases de Datos) Ejemplo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a, cliente b
WHERE a.cod_cliente = b.cod_cliente
AND &&&&& Todas las condiciones que quiero. etc.

Pero parece que en SQL SERVER debería de ser de éste modo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a
INNER JOIN cliente b
ON a.cod_cliente = b.cod_cliente ;
WHERE &&&&& Todas las condiciones que quiero. etc.

La verdad, es que leí por allí que hacerlo de la primera forma
afecta el rendimiento.

Pero yo he trabajado en VFP 9.0 datos considerables y al contrario mis
queries han resultado más rápidos y eficientes
que los escritos usando el INNER JOIN que traía la aplicación por
defaul.t
(Es una aplicación que se compró a terceros en la empresa donde laboro
construida en VFP 9.0).

Por eso, ahora que tengo que comenzar a trabajar en SQL SERVER me
gustaría saber, de acuerdo a su experiencia,
si en verdad afecta de manera sensible el rendimiento. Porque la
verdad considero mucho más fácil hacerlo
de la primera manera. La segunda me parece es Transact SQL.

No omito, comentarles que la aplicación que pienso hacer es pequeña
por lo que pienso utilizar la Versión Express
que soporta hasta 4 GB.

Les agradezco mucho su gran ayuda.
















Respuesta Responder a este mensaje
#13 aa
03/10/2009 - 00:12 | Informe spam
Los planes de ejecucion son la forma en que el sql se "arma" para resolver
una consulta,si usa indices,como mezcla las tablas,etc.
Si ejecutas un query en el query analizer podes pedir ver el plan de
ejecucion.

"Ernest" <ernest_rdQUITAR wrote in message
news:
Gracias Carlos por aclararme las cosas. No quisiera cansarlos con lo mismo
pero
de nuevo les agradezco a todos.

Efectivamente mi pregunta era si construir las sentencias en el WHERE
afectaba el performance
de SQL SERVER. Veo que tú concuerdas con la primera opinión que emitió
Rubén sobre que
no afecta en nada.

Ahora que es tan díficil que me expliques que son los planes de ejecución
?
Y porque decía aa que si afectaba ?

Sólo eso les pido de favor que me aclaren. O debo leer el libro primero ?

Gracias a todos de nuevo. Saludos !!!!



"Carlos Sacristan" escribió en el mensaje
news:
Esa no era la pregunta original de Ernest. Efectivamente en el WHERE no
puedes incluir sugerencias de combinación, pero la pregunta era si la
misma combinación de tablas, escrita en el JOIN o en el WHERE daba lo
mismo, y la respuesta, corta, es que sí.

Otra cosa es que metamos otra serie de variables como que qué tipo de
combinación estamos tratando, si queremos usar algún tipo de sugerencia o
similar.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
Con un where no se puede afectar la forma del join (hash,merge,etc)
menos si son joins remotos y no siempre el sql pasa los where a join
bien.
"Carlos Sacristan" wrote in message
news:
No estoy de acuerdo, pero es fácil de comprobar echando un vistazo al
plan de ejecución de una instrucción construida con JOIN y la otra con
las condiciones de combinación en el WHERE.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
A simple vista parece que no pero usar where en vez de inner puede
afectar los planes de ejecucion.
"Ernest" <ernest_rdQUITAR wrote in message
news:
Hola amigos que tal como están ?

Tengo una consulta : Estoy comenzando en SQL SERVER y necesito saber
cuál es la mejor manera de construir las
sentencias SELECT.

Hasta el momento he trabajado mis consultas de la siguiente manera.
(Usando otras Bases de Datos) Ejemplo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a, cliente b
WHERE a.cod_cliente = b.cod_cliente
AND &&&&& Todas las condiciones que quiero. etc.

Pero parece que en SQL SERVER debería de ser de éste modo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a
INNER JOIN cliente b
ON a.cod_cliente = b.cod_cliente ;
WHERE &&&&& Todas las condiciones que quiero. etc.

La verdad, es que leí por allí que hacerlo de la primera forma
afecta el rendimiento.

Pero yo he trabajado en VFP 9.0 datos considerables y al contrario
mis queries han resultado más rápidos y eficientes
que los escritos usando el INNER JOIN que traía la aplicación por
defaul.t
(Es una aplicación que se compró a terceros en la empresa donde
laboro construida en VFP 9.0).

Por eso, ahora que tengo que comenzar a trabajar en SQL SERVER me
gustaría saber, de acuerdo a su experiencia,
si en verdad afecta de manera sensible el rendimiento. Porque la
verdad considero mucho más fácil hacerlo
de la primera manera. La segunda me parece es Transact SQL.

No omito, comentarles que la aplicación que pienso hacer es pequeña
por lo que pienso utilizar la Versión Express
que soporta hasta 4 GB.

Les agradezco mucho su gran ayuda.





















Respuesta Responder a este mensaje
#14 Carlos M. Calvelo
03/10/2009 - 11:41 | Informe spam
Hola aa,

On 3 okt, 00:11, "aa" wrote:
El where si afecta ya que no es lo mismo hacer
select * from tabla a,table b
where a.campo1 = b.campo2 and
otras variables
and b.campo3 = 5

que hacer
select * from tabla a inner join table b
on a.campo1 = b.campo2 and b.campo3=5
where otras variables
ya que ahi el inner es mas rapido porque filtra antes.



Estás seguro?

Saludos,
Carlos
Respuesta Responder a este mensaje
#15 Carlos Sacristan
05/10/2009 - 10:02 | Informe spam
En una combinación interna (INNER JOIN), da igual poner los criterios de
combinación en el WHERE que en el JOIN. Otra cosa es cuando la combinación
es externa (LEFT OUTER JOIN o RIGHT OUTER JOIN); ahí sí que tiene
importancia dónde ponerlos, no sólo por el rendimiento, sino también por los
resultados obtenidos.

Pero vamos, que me remito a los planes de ejecución si no me crees...

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:%23j%
El where si afecta ya que no es lo mismo hacer
select * from tabla a,table b
where a.campo1 = b.campo2 and
otras variables
and b.campo3 = 5

que hacer
select * from tabla a inner join table b
on a.campo1 = b.campo2 and b.campo3=5
where otras variables
ya que ahi el inner es mas rapido porque filtra antes.
Todo esto dependiendo de la cantidad de registros por supuesto.

"Carlos Sacristan" wrote in message
news:
Esa no era la pregunta original de Ernest. Efectivamente en el WHERE no
puedes incluir sugerencias de combinación, pero la pregunta era si la
misma combinación de tablas, escrita en el JOIN o en el WHERE daba lo
mismo, y la respuesta, corta, es que sí.

Otra cosa es que metamos otra serie de variables como que qué tipo de
combinación estamos tratando, si queremos usar algún tipo de sugerencia o
similar.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
Con un where no se puede afectar la forma del join (hash,merge,etc)
menos si son joins remotos y no siempre el sql pasa los where a join
bien.
"Carlos Sacristan" wrote in message
news:
No estoy de acuerdo, pero es fácil de comprobar echando un vistazo al
plan de ejecución de una instrucción construida con JOIN y la otra con
las condiciones de combinación en el WHERE.

"Caminar sobre el agua y desarrollar software a partir de unas
especificaciones es fácil, si ambas están congeladas."
Edward V. Berard, ingeniero informático


"aa" wrote in message
news:
A simple vista parece que no pero usar where en vez de inner puede
afectar los planes de ejecucion.
"Ernest" <ernest_rdQUITAR wrote in message
news:
Hola amigos que tal como están ?

Tengo una consulta : Estoy comenzando en SQL SERVER y necesito saber
cuál es la mejor manera de construir las
sentencias SELECT.

Hasta el momento he trabajado mis consultas de la siguiente manera.
(Usando otras Bases de Datos) Ejemplo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a, cliente b
WHERE a.cod_cliente = b.cod_cliente
AND &&&&& Todas las condiciones que quiero. etc.

Pero parece que en SQL SERVER debería de ser de éste modo :

SELECT a.num_factura, a.fecha, a.cod_cliente, b.nom_cliente
FROM vta a
INNER JOIN cliente b
ON a.cod_cliente = b.cod_cliente ;
WHERE &&&&& Todas las condiciones que quiero. etc.

La verdad, es que leí por allí que hacerlo de la primera forma
afecta el rendimiento.

Pero yo he trabajado en VFP 9.0 datos considerables y al contrario
mis queries han resultado más rápidos y eficientes
que los escritos usando el INNER JOIN que traía la aplicación por
defaul.t
(Es una aplicación que se compró a terceros en la empresa donde
laboro construida en VFP 9.0).

Por eso, ahora que tengo que comenzar a trabajar en SQL SERVER me
gustaría saber, de acuerdo a su experiencia,
si en verdad afecta de manera sensible el rendimiento. Porque la
verdad considero mucho más fácil hacerlo
de la primera manera. La segunda me parece es Transact SQL.

No omito, comentarles que la aplicación que pienso hacer es pequeña
por lo que pienso utilizar la Versión Express
que soporta hasta 4 GB.

Les agradezco mucho su gran ayuda.




















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