Optimizar Indices

06/10/2005 - 19:29 por Pao | Informe spam
Tengo una duda:
Como puedo saber cual de mis indices es el más usando, así tambien mis
indices estadisticos.
_WA

Sucede que tengo una aplicación que constantemente hace este tipo de query's:
use sms_cliente
select count(*) from sms_res_enviadas
where re_hora_ing <= '10/06/2005 11:23:42' and re_operadora = 'P' and
re_estado = 'PEN' and re_codigo - re_codigo/1*1 = 0
go
use sms_cliente
select count(*) from sms_res_enviadas
where re_hora_ing <= '10/06/2005 11:23:42' and re_operadora ='B' and
re_estado = 'PEN' and re_codigo - re_codigo/1*1 = 0


Adjunto planes de ejecución: se supone que usa los indices pero yo no tengo
definido ningun indice que empiece con re_hora_ing o es por el de
re_codigo???

Indices:
sp_helpindex sms_res_enviadas
re_fechaing_idx nonclustered located on PRIMARY re_fecha_ing
re_recibido_idx nonclustered located on PRIMARY re_cod_recibido
re_transmitir_idx nonclustered located on PRIMARY re_codigo, re_operadora,
re_hora_ing, re_estado
sms_resenviadas_key clustered, unique located on PRIMARY re_codigo

Indices estadisticos:
_WA_Sys_re_hora_ing_79A81403
_WA_Sys_re_operadora_79A81403
_WA_Sys_re_estado_79A81403
_WA_Sys_re_fecha_env_79A81403
_WA_Sys_re_telefono_79A81403
_WA_Sys_re_hora_env_79A81403
_WA_Sys_re_mensaje_79A81403

Row Tabla: 520.000

Favor su ayuda que no entiendo este comportamiento
StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
set showplan_all on 14 1 0 1 SETON 0

(1 row(s) affected)

StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
set showplan_text on 15 1 0 1 SETON 0

(1 row(s) affected)

StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
SET STATISTICS IO on 16 1 0 1 SETSTATON 0

(1 row(s) affected)

StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
SET STATISTICS TIME on 17 1 0 1 SETSTATON 0

(1 row(s) affected)

StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
use sms_cliente 18 1 0 1 DBOPEN 0

select count(*) from sms_res_enviadas
where re_hora_ing <= '10/06/2005 11:23:42' and re_operadora = 'P' and
re_estado = 'PEN' and re_codigo - re_codigo/1*1 =
0 19 2 0 2 1.0 2.998153 SELECT 0
|--Compute Scalar(DEFINE:([Expr1002]=Convert([Expr1005]))) 19 3 2 Compute
Scalar Compute
Scalar DEFINE:([Expr1002]=Convert([Expr1005])) [Expr1002]=Convert([Expr1005]) 1.0 0.0 0.00000025 11 2.998153 [Expr1002] PLAN_ROW 0 1.0
|--Stream Aggregate(DEFINE:([Expr1005]=Count(*))) 19 4 3 Stream
Aggregate Aggregate [Expr1005]=Count(*) 1.0 0.0 0.00000025 11 2.998153 [Expr1005] PLAN_ROW 0 1.0
|--Index
Scan(OBJECT:([sms_cliente].[dbo].[sms_res_enviadas].[re_transmitir_idx]),
WHERE:((([sms_res_enviadas].[re_hora_ing]<='Oct 6 2005 11:23AM' AND
[sms_res_enviadas].[re_operadora]='P') AND
[sms_res_enviadas].[re_estado]='PEN') AND [sms_r 19 5 4 Index Scan Index
Scan OBJECT:([sms_cliente].[dbo].[sms_res_enviadas].[re_transmitir_idx]),
WHERE:((([sms_res_enviadas].[re_hora_ing]<='Oct 6 2005 11:23AM' AND
[sms_res_enviadas].[re_operadora]='P') AND
[sms_res_enviadas].[re_estado]='PEN') AND
[sms_res_enviadas].[re_codigo]-[ [sms_res_enviadas].[re_codigo],
[sms_res_enviadas].[re_estado], [sms_res_enviadas].[re_operadora],
[sms_res_enviadas].[re_hora_ing] 1.0 0.6721226 0.28607884 41 1.9164028 [sms_res_enviadas].[re_codigo],
[sms_res_enviadas].[re_estado], [sms_res_enviadas].[re_operadora],
[sms_res_enviadas].[re_hora_ing] PLAN_ROW 0 1.0

(5 row(s) affected)

StmtText StmtId NodeId Parent PhysicalOp LogicalOp Argument DefinedValues EstimateRows EstimateIO EstimateCPU AvgRowSize TotalSubtreeCost OutputList Warnings Type Parallel EstimateExecutions
use sms_cliente 20 1 0 1 DBOPEN 0

select count(*) from sms_res_enviadas
where re_hora_ing <= '10/06/2005 11:23:42' and re_operadora ='B' and
re_estado = 'PEN' and re_codigo - re_codigo/1*1 =
0 21 2 0 2 1.0 2.998153 SELECT 0
|--Compute Scalar(DEFINE:([Expr1002]=Convert([Expr1005]))) 21 3 2 Compute
Scalar Compute
Scalar DEFINE:([Expr1002]=Convert([Expr1005])) [Expr1002]=Convert([Expr1005]) 1.0 0.0 0.00000025 11 2.998153 [Expr1002] PLAN_ROW 0 1.0
|--Stream Aggregate(DEFINE:([Expr1005]=Count(*))) 21 4 3 Stream
Aggregate Aggregate [Expr1005]=Count(*) 1.0 0.0 0.00000025 11 2.998153 [Expr1005] PLAN_ROW 0 1.0
|--Index
Scan(OBJECT:([sms_cliente].[dbo].[sms_res_enviadas].[re_transmitir_idx]),
WHERE:((([sms_res_enviadas].[re_hora_ing]<='Oct 6 2005 11:23AM' AND
[sms_res_enviadas].[re_operadora]='B') AND
[sms_res_enviadas].[re_estado]='PEN') AND [sms_r 21 5 4 Index Scan Index
Scan OBJECT:([sms_cliente].[dbo].[sms_res_enviadas].[re_transmitir_idx]),
WHERE:((([sms_res_enviadas].[re_hora_ing]<='Oct 6 2005 11:23AM' AND
[sms_res_enviadas].[re_operadora]='B') AND
[sms_res_enviadas].[re_estado]='PEN') AND
[sms_res_enviadas].[re_codigo]-[ [sms_res_enviadas].[re_codigo],
[sms_res_enviadas].[re_estado], [sms_res_enviadas].[re_operadora],
[sms_res_enviadas].[re_hora_ing] 1.0 0.6721226 0.28607884 41 1.9164028 [sms_res_enviadas].[re_codigo],
[sms_res_enviadas].[re_estado], [sms_res_enviadas].[re_operadora],
[sms_res_enviadas].[re_hora_ing] PLAN_ROW 0 1.0

(5 row(s) affected)

Preguntas similare

Leer las respuestas

#16 Pao
10/10/2005 - 23:06 | Informe spam
efectivamente tienes toda la razón:

StmtText
|--Compute Scalar(DEFINE:([Expr1002]=Convert([Expr1003])))
|--Stream Aggregate(DEFINE:([Expr1003]=Count(*)))
|--Index
Seek(OBJECT:([sms_cliente].[dbo].[sms_res_enviadas].[re_transmitir_idx]),
SEEK:([sms_res_enviadas].[re_codigo]E AND
[sms_res_enviadas].[re_operadora]='P' AND ([sms_res_enviadas].[re_hora_ing],
[sms_res_enviadas].[re_estado]) <= ('Oct

(3 row(s) affected)

Voy a intentar conversar con el proveedor para los ajustes y le comento los
resultados, le agradezco mucho de su colaboración su ayuda me ha sido de
utilidad no solo para entender este caso más sino para aclarar muchas dudas,
su explicaciones son muy detalladas.

"Alejandro Mesa" wrote:

Mostrar la cita
#17 Pao
11/10/2005 - 20:40 | Informe spam
Esto es lo que indica el proveedore respecto a la condición:

"La condicion "re_codigo - re_codigo/1*1" es util cuando se levantan varios
procesos transmisores a la vez. La division "/1*1" se presenta porque solo
hay un transmisor, cuando existan varios transmisores, esta condicion cambia
a "re_codigo - re_codigo / #transmisores * #transmisor". "

"Alejandro Mesa" wrote:

Mostrar la cita
#18 Alejandro Mesa
11/10/2005 - 21:19 | Informe spam
Pao,

Hasta aqui llego yo. Yo no tengo la menor idea de lo que estan hablando,
solo expuse el por que esa expresion esta bloqueando a sql server de hacer un
buen uso del indice.

En cuanto a las estadisticas, se requiere de tiempo para hacer un analizis
de ellas. Te recomiendo que leas el articulo que adjunte sobre el tema.

Suerte,

AMB

"Pao" wrote:

Mostrar la cita
#19 Pao
12/10/2005 - 17:05 | Informe spam
ok, muchas gracias.

"Alejandro Mesa" wrote:

Mostrar la cita
Ads by Google
Search Busqueda sugerida