SQL - Indices Sql Server 2002

 
Vista:

Indices Sql Server 2002

Publicado por druz (35 intervenciones) el 06/10/2003 19:56:44
Hola,

amigos tengo un problema con un indice de una tabla, ya que cree un indice por el campo "id_dia_inicio_tramite" que tiene el formato datetime. Yo ocupo estos dos Query que tengo aca abajo, pero con la funcionalidad del "Sql Query Analyzer" -> "Execution Plan" me doy cuenta que el Query 1 no esta tomando el indice "Index Seek" pero en 2 si lo esta tomando.

Query 1
select a11.id_nivel1 id_nivel1,
count(distinct a11.id_cliente) WJXBFS1,
sum(a11.f_cant_tramites) WJXBFS2,
(sum(a11.f_cant_tramites) / NULLIF(count(distinct a11.id_cliente), 0)) WJXBFS3
from V_BT_TRAMITE a11
where (a11.id_dia_inicio_tramite >= '2003-08-01 00:00:00'
and a11.id_dia_inicio_tramite <= '2003-10-06 00:00:00')
group by a11.id_nivel1

Query 2
select sum(a11.f_cant_tramites) WJXBFS1,
count(a11.id_cliente) WJXBFS2
from V_BT_TRAMITE a11
where (a11.id_dia_inicio_tramite >= '2003-08-01 00:00:00'
and a11.id_dia_inicio_tramite <= '2003-10-06 00:00:00')

¿Por que el primer query no toma el indice (con el group by)?

</druz>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Indices Sql Server 2002

Publicado por Isaías Islas (5072 intervenciones) el 06/10/2003 21:11:18
Si en verdad desea "ayudarle" al SQL ha realizar sus consultas con un mayor performance (respuesta), hagalo asi:

where (CONVER(CHAR(8), a11.id_dia_inicio_tramite,112)
BETWEEN '20030801' AND '20031006'
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Indices Sql Server 2002

Publicado por Daniel (1 intervención) el 07/10/2003 18:11:20
no recomiento usar
where (CONVER(CHAR(8), a11.id_dia_inicio_tramite,112)
BETWEEN '20030801' AND '20031006'
debido a que SQL no distinge la columna id_dia_inicio_tramite como indice en ningun caso.
Lo mejor es dejar que SQL elija, segun sus estadisticas, el mejor camino a tomar.
en el caso 1 no debe estar usando el indice por el group by, por las funciones sum, count o sencillamente porque la cantidad de informacion a seleccionar y ordenar es mucha y si utiliza el indice seria mas grande el costo de CPU que si hace table scan.
sugiero chequear si SQL esta actualizando las estadisticas.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar