Como se ejecuta realmente una consulta...

21/11/2003 - 13:19 por Tolo | Informe spam
hola,

Vereis, a ver si aclaramos esto...

una pregunta que me hago está en saber cual de estas dos consultas se
ejecuta antes...

A) select sum(importe) as total from facturas group by id_factura

B) select sum(importe) as total from facturas where id_factura = 92832 group
by id_factura

Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es SGBD lo
que hace es crear la consulta, y luego sobre ella aplicar los filtros
definidos (where)

como lo veis vosotros??????????????????????????

Claro probar esto, puede ser complejo y solo cabría verlo montando una macro
BD, no?

Preguntas similare

Leer las respuestas

#1 Javier Loria
21/11/2003 - 19:31 | Informe spam
Hola Tolo:
Creo que asumes que el SQL es medio tonto!!!.
Si te mando a la tienda a comprar un listas de 40,000 articulos no te
vas directo, sino que previamente contratas un camion compras lo necesario,
lo cargas en el camion y luego lo traes. Si te mando a comprar 1 libra de
arroz, vas directo y lo traes.
El servidor de SQL no difiere mucho de tu forma de pensar antes de hacer
tu SELECT va a las "Estadisticas" y revisa cuantas filas va a encontrar. En
el primer caso se encuentra que son miles y toma las medidas necesarias
(podria ser que utilice una Tabla Hash en TempDb, o algo medio loco) y lo
resuelve.
Si encuentra que solo son un grupo pequeno, va las lee en memoria RAM
las agrupa y te la devuelve.
A este proceso de seleccion de alternativas y evaluacion del costo se le
llama "Query Optimizer".
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.
Tolo escribio:
hola,

Vereis, a ver si aclaramos esto...

una pregunta que me hago está en saber cual de estas dos consultas se
ejecuta antes...

A) select sum(importe) as total from facturas group by id_factura

B) select sum(importe) as total from facturas where id_factura > 92832 group by id_factura

Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es
SGBD lo que hace es crear la consulta, y luego sobre ella aplicar los
filtros definidos (where)

como lo veis vosotros??????????????????????????

Claro probar esto, puede ser complejo y solo cabría verlo montando
una macro BD, no?
Respuesta Responder a este mensaje
#2 Tolo
22/11/2003 - 13:52 | Informe spam
gracias, pero con eso creo q no contestas a mi pregunta.

un saluduo,

Tolo

"Javier Loria" escribió en el mensaje
news:
Hola Tolo:
Creo que asumes que el SQL es medio tonto!!!.
Si te mando a la tienda a comprar un listas de 40,000 articulos no te
vas directo, sino que previamente contratas un camion compras lo


necesario,
lo cargas en el camion y luego lo traes. Si te mando a comprar 1 libra de
arroz, vas directo y lo traes.
El servidor de SQL no difiere mucho de tu forma de pensar antes de


hacer
tu SELECT va a las "Estadisticas" y revisa cuantas filas va a encontrar.


En
el primer caso se encuentra que son miles y toma las medidas necesarias
(podria ser que utilice una Tabla Hash en TempDb, o algo medio loco) y lo
resuelve.
Si encuentra que solo son un grupo pequeno, va las lee en memoria RAM
las agrupa y te la devuelve.
A este proceso de seleccion de alternativas y evaluacion del costo se


le
llama "Query Optimizer".
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.
Tolo escribio:
> hola,
>
> Vereis, a ver si aclaramos esto...
>
> una pregunta que me hago está en saber cual de estas dos consultas se
> ejecuta antes...
>
> A) select sum(importe) as total from facturas group by id_factura
>
> B) select sum(importe) as total from facturas where id_factura > > 92832 group by id_factura
>
> Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es
> SGBD lo que hace es crear la consulta, y luego sobre ella aplicar los
> filtros definidos (where)
>
> como lo veis vosotros??????????????????????????
>
> Claro probar esto, puede ser complejo y solo cabría verlo montando
> una macro BD, no?


Respuesta Responder a este mensaje
#3 Eladio Rincón
22/11/2003 - 16:21 | Informe spam
Hola,

para recuperar el resultado de A, el procesador de consultas, deberá recorrerse toda la tabla (o en su defecto índice), para sumar importe de todas las columnas de la tabla.

para el resultado de B, el procesador de consultas, obtendrá el juego (SET) de registros que cumplen la condición ( id_factura = 92832 ), y después del conjunto de registros obtenidos, aplicar la agrupación;

Ten en cuenta el orden en que se procesa la consulta: después de tener el conjunto de registros afectados es cuando se aplica el group by, y después es cuando se aplican los having (en caso de que existan).


Saludos,

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

" Tolo" escribió en el mensaje news:
hola,

Vereis, a ver si aclaramos esto...

una pregunta que me hago está en saber cual de estas dos consultas se
ejecuta antes...

A) select sum(importe) as total from facturas group by id_factura

B) select sum(importe) as total from facturas where id_factura = 92832 group
by id_factura

Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es SGBD lo
que hace es crear la consulta, y luego sobre ella aplicar los filtros
definidos (where)

como lo veis vosotros??????????????????????????

Claro probar esto, puede ser complejo y solo cabría verlo montando una macro
BD, no?


Respuesta Responder a este mensaje
#4 Tolo
22/11/2003 - 17:04 | Informe spam
gracias,

"Eladio Rincón" escribió en el mensaje
news:uvt$
Hola,

para recuperar el resultado de A, el procesador de consultas, deberá
recorrerse toda la tabla (o en su defecto índice), para sumar importe de
todas las columnas de la tabla.

para el resultado de B, el procesador de consultas, obtendrá el juego (SET)
de registros que cumplen la condición ( id_factura = 92832 ), y después del
conjunto de registros obtenidos, aplicar la agrupación;

Ten en cuenta el orden en que se procesa la consulta: después de tener el
conjunto de registros afectados es cuando se aplica el group by, y después
es cuando se aplican los having (en caso de que existan).


Saludos,

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

" Tolo" escribió en el mensaje
news:
hola,

Vereis, a ver si aclaramos esto...

una pregunta que me hago está en saber cual de estas dos consultas se
ejecuta antes...

A) select sum(importe) as total from facturas group by id_factura

B) select sum(importe) as total from facturas where id_factura = 92832


group
by id_factura

Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es SGBD


lo
que hace es crear la consulta, y luego sobre ella aplicar los filtros
definidos (where)

como lo veis vosotros??????????????????????????

Claro probar esto, puede ser complejo y solo cabría verlo montando una


macro
BD, no?


Respuesta Responder a este mensaje
#5 Salvador Ramos
22/11/2003 - 19:48 | Informe spam
Hola Tolo:

A parte de lo que te indica Eladio, puedes activar la opción Mostrar planes
de ejecución del Query Analyzer, y ver los resultados que te ofrece (nº de
filas leídas ...) Esto te ayudará a entender mejor que es lo que realmente
está haciendo SQL Server.

Un saludo
Salvador Ramos
Murcia - España

No puedes conseguir software rápidamente disminuyendo su calidad.
En cambio, si que lo consigues aumentando la calidad.

www.helpdna.net (información sobre Windows DNA, SQL Server, VB, ...)


Microsoft MVP SQL Server
MCP SQL Server
PASS Spanish Group (www.sqlpass.org)



" Tolo" escribió en el mensaje
news:
gracias,

"Eladio Rincón" escribió en el mensaje
news:uvt$
Hola,

para recuperar el resultado de A, el procesador de consultas, deberá
recorrerse toda la tabla (o en su defecto índice), para sumar importe de
todas las columnas de la tabla.

para el resultado de B, el procesador de consultas, obtendrá el juego


(SET)
de registros que cumplen la condición ( id_factura = 92832 ), y después


del
conjunto de registros obtenidos, aplicar la agrupación;

Ten en cuenta el orden en que se procesa la consulta: después de tener el
conjunto de registros afectados es cuando se aplica el group by, y después
es cuando se aplican los having (en caso de que existan).


Saludos,

Eladio Rincón
SQL Server MVP
http://eladio.europe.webmatrixhosting.net

"Comparte lo que sabes, aprende lo que no sepas." FGG

" Tolo" escribió en el mensaje
news:
> hola,
>
> Vereis, a ver si aclaramos esto...
>
> una pregunta que me hago está en saber cual de estas dos consultas se
> ejecuta antes...
>
> A) select sum(importe) as total from facturas group by id_factura
>
> B) select sum(importe) as total from facturas where id_factura = 92832
group
> by id_factura
>
> Pues por lo q yo tengo entendido, deberían tardar lo mismo, pues es SGBD
lo
> que hace es crear la consulta, y luego sobre ella aplicar los filtros
> definidos (where)
>
> como lo veis vosotros??????????????????????????
>
> Claro probar esto, puede ser complejo y solo cabría verlo montando una
macro
> BD, no?
>
>


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