Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Dudas con "distinct" (https://www.clubdelphi.com/foros/showthread.php?t=82341)

santi33a 25-02-2013 20:16:56

Dudas con "distinct"
 
Hola a todos, tengo una consulta que solo me devuelve 3 registros pero
se me demora alrededor de 3 min, la consulta en si es:
Código SQL [-]
select distinct idregdocum, nombrelargo
from fin_documento d
inner join  fin_regdocum r on r.idregdocum = d.idregdoc
inner join fin_obligacion o on d.iddocumento = o.iddocumento
where r.ingresoegreso = -1

sin embargo si le quito el "distinct" entonces me devuelve alrededor
de 33000 registros pero me los devuelve al instante, que debo hacer
para que con "distinct" me lo devuelva mas rápido?

fin_documento tiene como clave primaria iddocumento y un indice sobre el campo idregdoc y tiene alrededor de 60000 registros.
fin_obligacion tiene como clave primaria iddocumento y tiene alrededor de 30000 registros
fin_regdocum solo tiene 31 registros.

Gracias
Santiago

Al González 25-02-2013 20:41:39

Hola Santiago.

Pareciera que sólo hace falta crear un índice sobre el campo nombrelargo, o bien un índice compuesto sobre los campos idregdocum y nombrelargo. :)

santi33a 26-02-2013 14:24:06

Hola Al González, en la tabla fin_regdocum idregdocum el la clave primaria, pero ademas como te dije esa tabla solo tiene 31 registros, por lo que hace innecesario a mi modo de ver nuevos indices, claro por si las moscas cree el indice compuesto que me dijiste y todo sigue igual.
Santiago

Al González 26-02-2013 17:04:39

Entiendo. Entonces, quizá, el índice que falta es sobre ingresoegreso. Y claro, aquellos campos que hacen relación con otras tablas deben tener su respectivo índice de llave exterior.

Por cierto, ¿qué motor de base de datos utilizas y dónde realizas las pruebas de tiempo? Puede que esos
"33000 registros al instante" sólo sea la primera página de muchas más.

Saludos. :)

santi33a 26-02-2013 20:05:49

uso SQL Server 2000 sp4, y el campo ingresoegreso pertenece a la tabla fin_regdocum que como te dije solo tiene 31 registro, por lo q no debe ser necesario indice.
Gracias. Santiago

santi33a 01-03-2013 15:24:45

Bueno gracias a todos les contaré que la solución fue convertir la llave principal de la tabla fin_documento (iddocumento) en un indice agrupado, solo con eso el resultado me salió casi inmediatamente.
Gracias


La franja horaria es GMT +2. Ahora son las 19:46:43.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi