Table Scan

17/08/2005 - 00:54 por Walter | Informe spam
Hola

Como elimino un table scan de un campo de fecha, el query es el siguiente:

SELECT da.cod_item, MAX( ph.nro_endoso )
FROM di_datos_au da with (nolock), pv_header ph with (nolock), tgrupo_endo
te with (nolock) WHERE ph.nro_pol = 9000000001 AND ph.id_pv = da.id_pv
AND ph.cod_suc = 640 AND ph.cod_ramo = 40 AND (ph.cod_grupo_endo =
te.cod_grupo_endo) AND (sn_adicional = -1 or sn_poliza = -1 or sn_prorroga =
-1 or sn_renovacion_automatica = -1 or sn_renovacion_manual = -1 or
sn_rehabilitacion = -1 or sn_declaracion = -1 or sn_refacturacion_manual = -1
)
AND da.fec_vig_desde <= cast('20041106' as smalldatetime)
AND ph.id_pv NOT IN ( SELECT ph.id_pv_modifica FROM pv_header ph with
(nolock), tgrupo_endo tg with (nolock)
WHERE ph.cod_grupo_endo = tg.cod_grupo_endo And tg.sn_cancelacion_endoso = -1
AND ph.cod_suc = 640
AND ph.cod_ramo = 40
AND ph.nro_pol = 9000000001 )
GROUP BY da.cod_item order by da.cod_item

Gracias espero sus comentarios

Preguntas similare

Leer las respuestas

#6 Walter
17/08/2005 - 17:41 | Informe spam
Al crearle el indixe en la tabla no afecta otras consultas que esten
consultando esta tabla?.
No tendre problemas al insertar en la tabla?
No hay alguna forma de crear el indixe temporalmente mienstras se ejecuta la
consulta y volverlo a desctruir?

Gracias por tu colaboracion.

"Maxi" wrote:

Hola, aqui tienes el problema

:([parametrizacion].[dbo].[di_datos_au] AS [da]),
WHERE:([da].[fec_vig_desde]<='Nov 6 2004 12:00AM'

Fijate que esta tabla tenga un indice por la columna fec_vig_desde


Salu2
Maxi


"Walter" escribió en el mensaje
news:
> Hola Maxi,
>
> Este seria el plan:
>
>
> |--Stream Aggregate(GROUP BY:([da].[cod_item])
> DEFINE:([Expr1005]=MAX([partialagg1006])))
> |--Parallelism(Gather Streams, ORDER BY:([da].[cod_item] ASC))
> |--Nested Loops(Inner Join, OUTER
> REFERENCES:([ph].[cod_grupo_endo]))
> |--Sort(ORDER BY:([da].[cod_item] ASC))
> | |--Hash Match(Aggregate, HASH:([da].[cod_item],
> [ph].[cod_grupo_endo]), RESIDUAL:([da].[cod_item]=[da].[cod_item] AND
> [ph].[cod_grupo_endo]=[ph].[cod_grupo_endo])
> DEFINE:([partialagg1006]=MAX([ph].[nro_endoso])))
> | |--Parallelism(Repartition Streams, PARTITION
> COLUMNS:([da].[cod_item], [ph].[cod_grupo_endo]))
> | |--Hash Match(Inner Join,
> HASH:([ph].[id_pv])=([da].[id_pv]))
> | |--Bitmap(HASH:([ph].[id_pv]),
> DEFINE:([Bitmap1007]))
> | | |--Parallelism(Repartition
> Streams, PARTITION COLUMNS:([ph].[id_pv]))
> | | |--Nested Loops(Left Anti
> Semi Join, WHERE:([ph].[id_pv_modifica]=NULL OR
> [ph].[id_pv]=[ph].[id_pv_modifica]))
> | | |--Bookmark
> Lookup(BOOKMARK:([Bmk1001]), OBJECT:([parametrizacion].[dbo].[pv_header]
> AS
> [ph]))
> | | |
> |--Parallelism(Distribute Streams)
> | | | |--Index
> Seek(OBJECT:([parametrizacion].[dbo].[pv_header].[pv_header_pol_ramo_suc_pk]
> AS [ph]), SEEK:([ph].[cod_suc]d0 AND [ph].[cod_ramo]@ AND
> [ph].[nro_pol]00000001) ORDERED FORWARD)
> | | |--Table Spool
> | | |--Nested
> Loops(Inner Join, OUTER REFERENCES:([ph].[cod_grupo_endo]))
> | | |--Bookmark
> Lookup(BOOKMARK:([Bmk1003]), OBJECT:([parametrizacion].[dbo].[pv_header]
> AS
> [ph]))
> | | | |--Index
> Seek(OBJECT:([parametrizacion].[dbo].[pv_header].[pv_header_pol_ramo_suc_pk]
> AS [ph]), SEEK:([ph].[cod_suc]d0 AND [ph].[cod_ramo]@ AND
> [ph].[nro_pol]00000001) ORDERED FORWARD)
> | | |--Clustered
> Index Seek(OBJECT:([parametrizacion].[dbo].[tgrupo_endo].[tgrupo_endo_pk]
> AS
> [tg]), SEEK:([tg].[cod_grupo_endo]=[ph].[cod_grupo_endo]),
> WHERE:([tg].[sn_cancelacion_endoso]=-1) ORDERED FORWARD)
> | |--Parallelism(Repartition Streams,
> PARTITION COLUMNS:([da].[id_pv]), WHERE:(PROBE([Bitmap1007])=TRUE))
> | |--Table
> Scan(OBJECT:([parametrizacion].[dbo].[di_datos_au] AS [da]),
> WHERE:([da].[fec_vig_desde]<='Nov 6 2004 12:00AM'))
> |--Clustered Index
> Seek(OBJECT:([parametrizacion].[dbo].[tgrupo_endo].[tgrupo_endo_pk] AS
> [te]),
> SEEK:([te].[cod_grupo_endo]=[ph].[cod_grupo_endo]),
> WHERE:((((((([te].[sn_adicional]=-1 OR [te].[sn_poliza]=-1) OR
> [te].[sn_prorroga]=-1) OR [te].[sn_renovacion_automatica]=-1) OR
> [te].[sn_renovacion_manual]=-1) OR [te].[sn_rehabilitacion]=-1) OR
> [te].[sn_declaracion]=-1) OR [te].[sn_refacturacion_manual]=-1) ORDERED
> FORWARD)
>
> Los indices de la tabla son:
>
> indice Agrupado
> Columnas
> di_datos_au_pk No
> id_pv,
> cod_item
> idx_di_datos_au_cha No
> txt_chasis
> idx_di_datos_au_form No
> nro_formulario
> idx_di_datos_au_mot No txt_motor
> idx_di_datos_au_pat No
> txt_patente
>
> Gracias por tu colaboracion.
>
>
>
>
>
> "Maxi" wrote:
>
>> Hola, yo no usaria nolock y dejaria a Sql tomar esa desicion.
>>
>> Para el plan de ejecucion modo texto debes entrar al Query analizer y
>> hacer
>>
>> SET SHOWPLAN_TEXT ON
>>
>> Tambien seria bueno que me pases que indices tienen esas tablas
>>
>>
>> Maxi - Buenos Aires - Argentina
>> Desarrollador 3 Estrellas
>>
>> Msn_messager:
>> mail: Maxi.da[arroba]gmail.com
>>
>> "Walter" escribió en el mensaje
>> news:
>> > como obtengo el plan de ejecucion en modo texto?,
>> > Nolock es para que bloquee es tabla.
>> > si tengo indixes.
>> >
>> >
>> > "Maxi" escribió:
>> >
>> >> Hola, varias cosas:
>> >>
>> >> 1) No uses Where para unir tablas sino usa JOIN
>> >> 2) Porque usas Nolock?
>> >>
>> >> Ahora preguntas
>> >>
>> >> 1) Tienes indices no?
>> >> 2) podrias en lugar de enviar la sentencia, enviarnos el plan de
>> >> ejecucion
>> >> en modo texto?
>> >>
>> >>
>> >> Maxi - Buenos Aires - Argentina
>> >> Desarrollador 3 Estrellas
>> >>
>> >> Msn_messager:
>> >> mail: Maxi.da[arroba]gmail.com
>> >>
>> >> "Walter" escribió en el mensaje
>> >> news:
>> >> > Hola
>> >> >
>> >> > Como elimino un table scan de un campo de fecha, el query es el
>> >> > siguiente:
>> >> >
>> >> > SELECT da.cod_item, MAX( ph.nro_endoso )
>> >> > FROM di_datos_au da with (nolock), pv_header ph with (nolock),
>> >> > tgrupo_endo
>> >> > te with (nolock) WHERE ph.nro_pol = 9000000001 AND ph.id_pv > >> >> > da.id_pv
>> >> > AND ph.cod_suc = 640 AND ph.cod_ramo = 40 AND
>> >> > (ph.cod_grupo_endo > >> >> > te.cod_grupo_endo) AND (sn_adicional = -1 or sn_poliza = -1 or
>> >> > sn_prorroga > >> >> > -1 or sn_renovacion_automatica = -1 or sn_renovacion_manual = -1 or
>> >> > sn_rehabilitacion = -1 or sn_declaracion = -1 or
>> >> > sn_refacturacion_manual
>> >> > = -1
>> >> > )
>> >> > AND da.fec_vig_desde <= cast('20041106' as smalldatetime)
>> >> > AND ph.id_pv NOT IN ( SELECT ph.id_pv_modifica FROM pv_header ph
>> >> > with
>> >> > (nolock), tgrupo_endo tg with (nolock)
>> >> > WHERE ph.cod_grupo_endo = tg.cod_grupo_endo And
>> >> > tg.sn_cancelacion_endoso
>> >> > = -1
>> >> > AND ph.cod_suc = 640
>> >> > AND ph.cod_ramo = 40
>> >> > AND ph.nro_pol = 9000000001 )
>> >> > GROUP BY da.cod_item order by da.cod_item
>> >> >
>> >> > Gracias espero sus comentarios
>> >>
>> >>
>> >>
>>
>>
>>



Respuesta Responder a este mensaje
#7 Maxi
17/08/2005 - 17:44 | Informe spam
Hola Walter, pues si, si creas el indice se pondra mas lento las otras
operaciones, pero no tienes opcion, por eso es importante hacer un buen
balanceo o sino tener una base de datos dedicada solo a consultas


Salu2
Maxi


"Walter" escribió en el mensaje
news:
Al crearle el indixe en la tabla no afecta otras consultas que esten
consultando esta tabla?.
No tendre problemas al insertar en la tabla?
No hay alguna forma de crear el indixe temporalmente mienstras se ejecuta
la
consulta y volverlo a desctruir?

Gracias por tu colaboracion.

"Maxi" wrote:

Hola, aqui tienes el problema

:([parametrizacion].[dbo].[di_datos_au] AS [da]),
WHERE:([da].[fec_vig_desde]<='Nov 6 2004 12:00AM'

Fijate que esta tabla tenga un indice por la columna fec_vig_desde


Salu2
Maxi


"Walter" escribió en el mensaje
news:
> Hola Maxi,
>
> Este seria el plan:
>
>
> |--Stream Aggregate(GROUP BY:([da].[cod_item])
> DEFINE:([Expr1005]=MAX([partialagg1006])))
> |--Parallelism(Gather Streams, ORDER BY:([da].[cod_item] ASC))
> |--Nested Loops(Inner Join, OUTER
> REFERENCES:([ph].[cod_grupo_endo]))
> |--Sort(ORDER BY:([da].[cod_item] ASC))
> | |--Hash Match(Aggregate, HASH:([da].[cod_item],
> [ph].[cod_grupo_endo]), RESIDUAL:([da].[cod_item]=[da].[cod_item] AND
> [ph].[cod_grupo_endo]=[ph].[cod_grupo_endo])
> DEFINE:([partialagg1006]=MAX([ph].[nro_endoso])))
> | |--Parallelism(Repartition Streams, PARTITION
> COLUMNS:([da].[cod_item], [ph].[cod_grupo_endo]))
> | |--Hash Match(Inner Join,
> HASH:([ph].[id_pv])=([da].[id_pv]))
> | |--Bitmap(HASH:([ph].[id_pv]),
> DEFINE:([Bitmap1007]))
> | | |--Parallelism(Repartition
> Streams, PARTITION COLUMNS:([ph].[id_pv]))
> | | |--Nested Loops(Left Anti
> Semi Join, WHERE:([ph].[id_pv_modifica]=NULL OR
> [ph].[id_pv]=[ph].[id_pv_modifica]))
> | | |--Bookmark
> Lookup(BOOKMARK:([Bmk1001]),
> OBJECT:([parametrizacion].[dbo].[pv_header]
> AS
> [ph]))
> | | |
> |--Parallelism(Distribute Streams)
> | | | |--Index
> Seek(OBJECT:([parametrizacion].[dbo].[pv_header].[pv_header_pol_ramo_suc_pk]
> AS [ph]), SEEK:([ph].[cod_suc]d0 AND [ph].[cod_ramo]@ AND
> [ph].[nro_pol]00000001) ORDERED FORWARD)
> | | |--Table Spool
> | | |--Nested
> Loops(Inner Join, OUTER REFERENCES:([ph].[cod_grupo_endo]))
> | |
> |--Bookmark
> Lookup(BOOKMARK:([Bmk1003]),
> OBJECT:([parametrizacion].[dbo].[pv_header]
> AS
> [ph]))
> | | |
> |--Index
> Seek(OBJECT:([parametrizacion].[dbo].[pv_header].[pv_header_pol_ramo_suc_pk]
> AS [ph]), SEEK:([ph].[cod_suc]d0 AND [ph].[cod_ramo]@ AND
> [ph].[nro_pol]00000001) ORDERED FORWARD)
> | |
> |--Clustered
> Index
> Seek(OBJECT:([parametrizacion].[dbo].[tgrupo_endo].[tgrupo_endo_pk]
> AS
> [tg]), SEEK:([tg].[cod_grupo_endo]=[ph].[cod_grupo_endo]),
> WHERE:([tg].[sn_cancelacion_endoso]=-1) ORDERED FORWARD)
> | |--Parallelism(Repartition Streams,
> PARTITION COLUMNS:([da].[id_pv]), WHERE:(PROBE([Bitmap1007])=TRUE))
> | |--Table
> Scan(OBJECT:([parametrizacion].[dbo].[di_datos_au] AS [da]),
> WHERE:([da].[fec_vig_desde]<='Nov 6 2004 12:00AM'))
> |--Clustered Index
> Seek(OBJECT:([parametrizacion].[dbo].[tgrupo_endo].[tgrupo_endo_pk] AS
> [te]),
> SEEK:([te].[cod_grupo_endo]=[ph].[cod_grupo_endo]),
> WHERE:((((((([te].[sn_adicional]=-1 OR [te].[sn_poliza]=-1) OR
> [te].[sn_prorroga]=-1) OR [te].[sn_renovacion_automatica]=-1) OR
> [te].[sn_renovacion_manual]=-1) OR [te].[sn_rehabilitacion]=-1) OR
> [te].[sn_declaracion]=-1) OR [te].[sn_refacturacion_manual]=-1) ORDERED
> FORWARD)
>
> Los indices de la tabla son:
>
> indice Agrupado
> Columnas
> di_datos_au_pk No
> id_pv,
> cod_item
> idx_di_datos_au_cha No
> txt_chasis
> idx_di_datos_au_form No
> nro_formulario
> idx_di_datos_au_mot No
> txt_motor
> idx_di_datos_au_pat No
> txt_patente
>
> Gracias por tu colaboracion.
>
>
>
>
>
> "Maxi" wrote:
>
>> Hola, yo no usaria nolock y dejaria a Sql tomar esa desicion.
>>
>> Para el plan de ejecucion modo texto debes entrar al Query analizer y
>> hacer
>>
>> SET SHOWPLAN_TEXT ON
>>
>> Tambien seria bueno que me pases que indices tienen esas tablas
>>
>>
>> Maxi - Buenos Aires - Argentina
>> Desarrollador 3 Estrellas
>>
>> Msn_messager:
>> mail: Maxi.da[arroba]gmail.com
>>
>> "Walter" escribió en el mensaje
>> news:
>> > como obtengo el plan de ejecucion en modo texto?,
>> > Nolock es para que bloquee es tabla.
>> > si tengo indixes.
>> >
>> >
>> > "Maxi" escribió:
>> >
>> >> Hola, varias cosas:
>> >>
>> >> 1) No uses Where para unir tablas sino usa JOIN
>> >> 2) Porque usas Nolock?
>> >>
>> >> Ahora preguntas
>> >>
>> >> 1) Tienes indices no?
>> >> 2) podrias en lugar de enviar la sentencia, enviarnos el plan de
>> >> ejecucion
>> >> en modo texto?
>> >>
>> >>
>> >> Maxi - Buenos Aires - Argentina
>> >> Desarrollador 3 Estrellas
>> >>
>> >> Msn_messager:
>> >> mail: Maxi.da[arroba]gmail.com
>> >>
>> >> "Walter" escribió en el mensaje
>> >> news:
>> >> > Hola
>> >> >
>> >> > Como elimino un table scan de un campo de fecha, el query es el
>> >> > siguiente:
>> >> >
>> >> > SELECT da.cod_item, MAX( ph.nro_endoso )
>> >> > FROM di_datos_au da with (nolock), pv_header ph with (nolock),
>> >> > tgrupo_endo
>> >> > te with (nolock) WHERE ph.nro_pol = 9000000001 AND ph.id_pv >> >> >> > da.id_pv
>> >> > AND ph.cod_suc = 640 AND ph.cod_ramo = 40 AND
>> >> > (ph.cod_grupo_endo >> >> >> > te.cod_grupo_endo) AND (sn_adicional = -1 or sn_poliza = -1 or
>> >> > sn_prorroga >> >> >> > -1 or sn_renovacion_automatica = -1 or sn_renovacion_manual = -1
>> >> > or
>> >> > sn_rehabilitacion = -1 or sn_declaracion = -1 or
>> >> > sn_refacturacion_manual
>> >> > = -1
>> >> > )
>> >> > AND da.fec_vig_desde <= cast('20041106' as smalldatetime)
>> >> > AND ph.id_pv NOT IN ( SELECT ph.id_pv_modifica FROM pv_header ph
>> >> > with
>> >> > (nolock), tgrupo_endo tg with (nolock)
>> >> > WHERE ph.cod_grupo_endo = tg.cod_grupo_endo And
>> >> > tg.sn_cancelacion_endoso
>> >> > = -1
>> >> > AND ph.cod_suc = 640
>> >> > AND ph.cod_ramo = 40
>> >> > AND ph.nro_pol = 9000000001 )
>> >> > GROUP BY da.cod_item order by da.cod_item
>> >> >
>> >> > Gracias espero sus comentarios
>> >>
>> >>
>> >>
>>
>>
>>



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una pregunta AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida