Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

table scan/index seek en procedimiento

Estas en el tema de table scan/index seek en procedimiento en el foro de SQL Server en Foros del Web. Tengo una consulta dentro de un procedimiento que en principio es sencilla pero esta tardando mas de lo normal. Al trazar el plan de ejecución ...
  #1 (permalink)  
Antiguo 12/05/2009, 10:01
 
Fecha de Ingreso: junio-2007
Mensajes: 28
Antigüedad: 16 años, 11 meses
Puntos: 0
table scan/index seek en procedimiento

Tengo una consulta dentro de un procedimiento que en principio es sencilla pero esta tardando mas de lo normal.
Al trazar el plan de ejecución del procedimiento me he dado cuenta que en vez de hacer un index seek está haciendo un table scan.
Los indices están bien creados.
Si ejecuto la consulta en el analizador con los mismos parámetros que recibe en el procedimiento hace un index seek.
En el entorno de desarrollo la consulta es casi inmediata y el plan de ejecucion es el correcto pero en el entorno de producción se ejecuta el plan de ejecución lento.

¿Alguien sabria decirme por que son estas diferéncias, por que no se ejecuta el plan correcto si ejecutando el mismo codigo fuera del procedimiento si que se ejecuta bien?¿pasa algo al estar dentro del procedimiento?

Al final he solucionado el problema añadiendo el índice a la hora de llamar a la tabla dentro de una clausula with "from tabla with(index(nombre_indice), nolock)" , pero me gustaría saber porqué me está ocurriendo este problema para solucionarlo de otra forma i asegurarme de que no vuelva a suceder ya que nos ha costado bastante llegar a verlo.

gracias por la atención
  #2 (permalink)  
Antiguo 12/05/2009, 19:19
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: table scan/index seek en procedimiento

¿Algun CONVERT/CAST en tu Where?
  #3 (permalink)  
Antiguo 13/05/2009, 10:50
 
Fecha de Ingreso: junio-2007
Mensajes: 28
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: table scan/index seek en procedimiento

No, a no ser que sea algun convert implicito.
  #4 (permalink)  
Antiguo 13/05/2009, 10:52
Avatar de GeoAvila
Colaborador
 
Fecha de Ingreso: diciembre-2003
Ubicación: Antigua Guatemala
Mensajes: 4.032
Antigüedad: 20 años, 5 meses
Puntos: 53
Respuesta: table scan/index seek en procedimiento

Cita:
Iniciado por garruc Ver Mensaje
No, a no ser que sea algun convert implicito.
podría ser in index malo podes usar checkdb para verificar algun error en las tablas..

nos vemos.
__________________
* Antes de preguntar lee las FAQ, y por favor no hagas preguntas en las FAQ
Sitio http://www.geoavila.com twitter: @GeoAvila
  #5 (permalink)  
Antiguo 13/05/2009, 11:03
 
Fecha de Ingreso: junio-2007
Mensajes: 28
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: table scan/index seek en procedimiento

ahí os envío la consulta por si os sirve de algo
"@facturas_ventas" es una variable tipo tabla, el resto son variables del procedimiento

insert into @facturas_ventas
select distinct f.id, f.total, f.descuento,f.descuento2,f.descuento3, @cta_recargo_ventas, f.totalre, @ctairpf, f.totalirpf, cli.re, f.divisa,1
from dbo.facturas f with(index (PK_FAC),nolock )
inner join caja c with(index(IX_CAJA_CAJA_FECHA_TANOTACION),nolock) on
c.id=@caja
and c.fecha >= @fecha_ant
and c.fecha <= @fecha_post
and c.tanotacion='ENTRADA'
and c.tdoc='FACTURA'
and f.id=c.ndoc
inner join dbo.clientes cli with(index(PK_CLIENTES),nolock) on and cli.ncliente = f.ncliente
where
and f.serie=@serief
and f.contabilizado=isnull(@conta,f.contabilizado)
  #6 (permalink)  
Antiguo 13/05/2009, 20:40
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 10 meses
Puntos: 180
Respuesta: table scan/index seek en procedimiento

Coloca tu query en el analizador de consultas, selecciona todo y presiona CTRL+L, revisa donde se hace el TABLE SCAN.

En lo personal, no me gusta mucho indicarle a SQL Server, el INDICE a utilizar, prefiero que el haga esa seleccion en base a los estadisticos.
  #7 (permalink)  
Antiguo 14/05/2009, 03:11
 
Fecha de Ingreso: junio-2007
Mensajes: 28
Antigüedad: 16 años, 11 meses
Puntos: 0
Respuesta: table scan/index seek en procedimiento

Ya probé la consulta desde el analizador de consultas y se ejecutabe bien sin utilizar el TABLE SCAN, pero dentro del procedimiento si que lo utiliza.
La consulta es la que he puesto anteriormente y el plan de ejecución me marcaba que hacia table scan en las tablas de caja, facturas y clientes.
Yo tambien pienso que es mejor no forzar los indices pero fue la solucion temporal hasta encontrar el origen del problema.
  #8 (permalink)  
Antiguo 30/04/2012, 07:04
 
Fecha de Ingreso: abril-2012
Mensajes: 1
Antigüedad: 12 años
Puntos: 0
Respuesta: table scan/index seek en procedimiento

Hola,

En la consulta no veo ningun TOP o algo del estilo que limite registros.

En ocasiones, el optimizador puere elegir realizar un table scan cuando el numero de registros a devolver es tan alto que le sale mas rentable iterar que buscar a traves del indice. Esto podria ser dado que es produccion y tienes muchos mas registros que en desarollo (creo ;) )

Si te ayuda, echa un ojo aquí [URL="http://jordi-montana.blogspot.com.es/2011/04/t-sql-sql-server-index-scan-vs-index.html?m=0"]http://jordi-montana.blogspot.com.es/2011/04/t-sql-sql-server-index-scan-vs-index.html?m=0[/URL]
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 04:38.