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

#1 Jesús López
16/01/2008 - 13:18 | Informe spam
Que suponga una pérdida en el rendimiento eso es seguro. Ahora, si será
apreciable o no, yo diría que eso dependerá de la consulta

Saludos:

Jesús López
www.solidq.com



"Alfredo Novoa" escribió en el mensaje
news:
Hola,

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


Gracias

Respuesta Responder a este mensaje
#2 Alfredo Novoa
16/01/2008 - 18:29 | Informe spam
Hola Jorge,

On Wed, 16 Jan 2008 11:13:19 -0600, "jorge" wrote:

Hice una prueba.
La tabla tiene casi 300 mil registros en la grafica se muestra la diferencia
pero en resumen, el servidor realiza mas tareas cuando usamos el distinct
(lo cual es obvio)



Para mi no es obvio. Si se detecta que el distinct es innecesario se
puede hacer el mismo trabajo.

ahora otra cosa que note es que si hace haces un disctinc en un campo que es
clave primario (quien lo haria???)



Un generador de código SQL poco inteligente O:-)

el trabajo es el igual como si no tuviera
distinct.



Eso es lo que quería saber. Gracias.


Saludos
Respuesta Responder a este mensaje
#3 Alfredo Novoa
16/01/2008 - 19:09 | Informe spam
Hola Jesús.

On Wed, 16 Jan 2008 13:18:02 +0100, "Jesús López"
wrote:

Que suponga una pérdida en el rendimiento eso es seguro. Ahora, si será
apreciable o no, yo diría que eso dependerá de la consulta



Pues he hecho unas cuantas pruebas y me sale el mismo plan y tarda lo
mismo.

Así ya no me tengo que molestar en mirar yo cuando se necesita el
distinct. Hago que el generador de SQL lo ponga siempre y listo.

Excepto cuando hay un "order by" que tiene atributos que no están en
el select, claro.


Saludos
Alfredo
Respuesta Responder a este mensaje
#4 Jesús López
16/01/2008 - 19:38 | Informe spam
"Alfredo Novoa" escribió en el mensaje
news:

Hola Jesús.

On Wed, 16 Jan 2008 13:18:02 +0100, "Jesús López"
wrote:

Que suponga una pérdida en el rendimiento eso es seguro. Ahora, si será
apreciable o no, yo diría que eso dependerá de la consulta



Pues he hecho unas cuantas pruebas y me sale el mismo plan y tarda lo
mismo.




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, 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



Así ya no me tengo que molestar en mirar yo cuando se necesita el
distinct. Hago que el generador de SQL lo ponga siempre y listo.

Excepto cuando hay un "order by" que tiene atributos que no están en
el select, claro.


Saludos
Alfredo
Respuesta Responder a este mensaje
#5 Alfredo Novoa
17/01/2008 - 14:39 | Informe spam
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
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida