Distinct superfluos y rendimiento

16/01/2008 - 12:12 por Alfredo Novoa | Informe spam
Hola,

¿Alguien sabe si poner una clausula "distinct" cuando es innecesaria
puede causar una pérdida apreciable en el rendimiento?


Gracias

Preguntas similare

Leer las respuestas

#6 Jesús López
17/01/2008 - 15:40 | Informe spam
Pues haber dicho al principio qué considerabas tú que DISTINCT es
superflueo. porque como comprenderás aquí no somo adivinos.


"Alfredo Novoa" escribió en el mensaje
news:
On Wed, 16 Jan 2008 19:38:32 +0100, "Jesús López"
wrote:

Hola Jesús.

Pues estas dos consultas sobre la base de datos de ejemplo AdventureWorks
que devuelven el mismo conjunto de registros y por tanto podría
considerarse
que DISTINCT es innecesario,



No, para que pueda considerarse que el DISTINCT es innecesario no
llega con que las consultas devuelvan los mismos valores, sino que
TIENEN que devolver los mismos valores cualquiera que sean los datos
que haya en las tablas.

tienen distinto plan de ejecución y no tardan
lo mismo. La que tiene DISTINCT tarda cuatro veces más:

SELECT DISTINCT FirstName, LastName, EmailAddress, EmailPromotion, Phone,
PasswordHash
FROM Person.Contact


SELECT FirstName, LastName, EmailAddress, EmailPromotion, Phone,
PasswordHash
FROM Person.Contact



¿Hay alguna clave en estos campos?

Si no la hay, las consultas no son equivalentes y es normal que tengan
planes distintos.


Saludos
Alfredo


Respuesta Responder a este mensaje
#7 Alfredo Novoa
17/01/2008 - 16:04 | Informe spam
On Thu, 17 Jan 2008 15:40:40 +0100, "Jesús López"
wrote:

Pues haber dicho al principio qué considerabas tú que DISTINCT es
superflueo. porque como comprenderás aquí no somo adivinos.



Es que era evidente. Los datos de las tablas cambian. Jorge lo
entendió a la primera.

Lo que me queda por probar es si hay efectos cuando eliminas del
select la clave primaria pero quedan más claves.


Saludos
Respuesta Responder a este mensaje
#8 Jesús López
17/01/2008 - 16:31 | Informe spam
"Alfredo Novoa" escribió en el mensaje
news:
On Thu, 17 Jan 2008 15:40:40 +0100, "Jesús López"
wrote:

Pues haber dicho al principio qué considerabas tú que DISTINCT es
superflueo. porque como comprenderás aquí no somo adivinos.



Es que era evidente. Los datos de las tablas cambian. Jorge lo
entendió a la primera.




Jorge lo interpretó bien a la primera, a veces yo tengo también esa suerte.


Lo que me queda por probar es si hay efectos cuando eliminas del
select la clave primaria pero quedan más claves.


Saludos
Respuesta Responder a este mensaje
#9 Jesús López
17/01/2008 - 16:42 | Informe spam
¿Dónde narices está definido el término "DISTINCT superfluo" en el contexto
de bases de datos? ¿No está sujeto entonces a la interpretación de cada
uno, por muy evidente que a alguien le pueda parecer?


Estoy completamete seguro de que si en vez de decir "DISTINCT superfluo"
hubieras dicho DISTINCT con claves primarias o claves únicas en la lista de
selección la cosa hubiera cambiado.


"Alfredo Novoa" escribió en el mensaje
news:
On Thu, 17 Jan 2008 15:40:40 +0100, "Jesús López"
wrote:

Pues haber dicho al principio qué considerabas tú que DISTINCT es
superflueo. porque como comprenderás aquí no somo adivinos.



Es que era evidente. Los datos de las tablas cambian. Jorge lo
entendió a la primera.

Lo que me queda por probar es si hay efectos cuando eliminas del
select la clave primaria pero quedan más claves.


Saludos
Respuesta Responder a este mensaje
#10 Alfredo Novoa
17/01/2008 - 17:08 | Informe spam
On Thu, 17 Jan 2008 16:42:24 +0100, "Jesús López"
wrote:

¿Dónde narices está definido el término "DISTINCT superfluo" en el contexto
de bases de datos?



La definición de superfluo viene en el diccionario, y no tiene ningún
significado especial en el contexto de las bases de datos.

¿No está sujeto entonces a la interpretación de cada
uno, por muy evidente que a alguien le pueda parecer?



No, no lo está. Era suficientemente preciso.

Superfluo significa innecesario. En el contexto de una consulta es
evidente que significa que si lo eliminas entonces tienes una consulta
equivalente. Una consulta que puede devolver resultados iguales o
diferentes no es una consulta equivalente.

Por ejemplo "select * from x where a = 1" no es equivalente a "select
* from x" aunque en algunos casos las dos consultas puedan devolver el
mismo resultado.


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