Siempre práctico en tus comentarios, te los agradezco y aprecio.
Bueno, después de seguir leyendo sobre la teoría de los índices y de constatar que en la tabla SALIDAS tengo duplicados en
IdPlanta e
IdRollo, incluso con
IdCliente, y de saber por tus palabras que incluir Referencia en el índice haría que no serviera de mucho, creo que lo mejor que puedo hacer es re-hacer esa consulta, incluso modificar un poco los sistemas; de igual forma he investigado el contenido de los campos y veo que se puede aliminar esa búsqueda con LIKE sobre el campo
Referencia, ya tiene datos compuestos, ya que los prefijos de la misma dicen que tipo de movimiento, voy a agregar un campo tipo y así podré indizar este campo.
De igual forma me he enterado que posiblemente ese UNION no sea necesario ya que en salidas estan todos los registros y en la tabla Remisiones estan registros que también estan en Salidas. En fin, voy a cambiarles por completo esta consulta y espero que se acelere el tiempo de respuesta, Salidas y RollosEmbarque tienen más del medio millón de registros c/u.
Te dejo de igual forma las salidas del SHOWPLAN_TEXT de c/u por si observas algo que pueda yo pasar por alto. Gracias nuevamente.
De la primer consulta:
Código:
|--Hash Match(Right Outer Join, HASH:([op].[IDOperador])=([re].[IDOperador]), RESIDUAL:([Pruebas].[dbo].[Remisiones].[IDOperador] as [re].[IDOperador]=[Pruebas].[dbo].[Operadores].[IDOperador] as [op].[IDOperador]))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Operadores].[PK_Operadores] AS [op]))
|--Hash Match(Right Outer Join, HASH:([co].[IDConsignatario])=([re].[IDConsignatario]), RESIDUAL:([Pruebas].[dbo].[Remisiones].[IDConsignatario] as [re].[IDConsignatario]=[Pruebas].[dbo].[Consignatarios].[IDConsignatario] as [co].[IDConsignatario]))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Consignatarios].[PK_Consignatarios] AS [co]))
|--Hash Match(Inner Join, HASH:([gr].[IDCliente])=([c].[IDGrupo]), RESIDUAL:([Pruebas].[dbo].[Clientes].[IDGrupo] as [c].[IDGrupo]=[Pruebas].[dbo].[Clientes].[IDCliente] as [gr].[IDCliente]))
|--Index Scan(OBJECT:([Pruebas].[dbo].[Clientes].[IX_Clientes] AS [gr]))
|--Hash Match(Inner Join, HASH:([c].[IDCliente])=([ro].[IDCliente]))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Clientes].[PK_Clientes] AS [c]))
|--Hash Match(Inner Join, HASH:([re].[NoRemision])=([rd].[NoRemision]))
|--Compute Scalar(DEFINE:([Expr1015]=CONVERT(varchar(30),[Pruebas].[dbo].[Remisiones].[NoRemision] as [re].[NoRemision],0), [Expr1016]=CONVERT(varchar(30),[Pruebas].[dbo].[Remisiones].[NoFacturaVenta] as [re].[NoFacturaVenta],0)))
| |--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Remisiones].[PK_Remisiones] AS [re]), WHERE:([Pruebas].[dbo].[Remisiones].[Fecha] as [re].[Fecha]>='2007-01-01 00:00:00.000' AND [Pruebas].[dbo].[Remisiones].[Fecha] as [re].[Fecha]<'2009-01-01 00:00:00.000' AND [Pruebas].[dbo].[Remisiones].[Estatus] as [re].[Estatus]='C'))
|--Hash Match(Inner Join, HASH:([rd].[IDRollo])=([ro].[IDRollo]), RESIDUAL:([Pruebas].[dbo].[RollosEmbarque].[IDRollo] as [ro].[IDRollo]=[Pruebas].[dbo].[RemisionesDetalle].[IDRollo] as [rd].[IDRollo]))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[RemisionesDetalle].[PK_RemisionesDetalle] AS [rd]))
|--Compute Scalar(DEFINE:([Expr1014]=(CONVERT(varchar(30),[Pruebas].[dbo].[RollosEmbarque].[Posicion] as [ro].[Posicion],0)+'/')+CONVERT(varchar(30),[Pruebas].[dbo].[RollosEmbarque].[Cortes] as [ro].[Cortes],0)))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[RollosEmbarque].[PK_RollosEmbarque] AS [ro]), WHERE:([Pruebas].[dbo].[RollosEmbarque].[IDPlanta] as [ro].[IDPlanta]<>'APRAMOS' AND [Pruebas].[dbo].[RollosEmbarque].[IDPlanta] as [ro].[IDPlanta]<>'APSLP' AND [Pruebas].[dbo].[RollosEmbarque].[IDPlanta] as [ro].[IDPlanta]<>'LAGERMEX-PUE' AND [Pruebas].[dbo].[RollosEmbarque].[IDPlanta] as [ro].[IDPlanta]<>'LAGERMEX-SAL'))
De la segunda consulta:
Código:
|--Compute Scalar(DEFINE:([Expr1009]=(0), [Expr1010]='', [Expr1011]=NULL, [Expr1012]='', [Expr1013]=(0), [Expr1016]='EDI', [Expr1017]=''))
|--Hash Match(Inner Join, HASH:([gr].[IDCliente])=([c].[IDGrupo]), RESIDUAL:([Pruebas].[dbo].[Clientes].[IDGrupo] as [c].[IDGrupo]=[Pruebas].[dbo].[Clientes].[IDCliente] as [gr].[IDCliente]))
|--Index Scan(OBJECT:([Pruebas].[dbo].[Clientes].[IX_Clientes] AS [gr]))
|--Hash Match(Inner Join, HASH:([c].[IDCliente])=([s].[IDCliente]))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Clientes].[PK_Clientes] AS [c]))
|--Merge Join(Inner Join, MERGE:([ro].[IDRollo])=([s].[IDRollo]), RESIDUAL:([Pruebas].[dbo].[Salidas].[IDRollo] as [s].[IDRollo]=[Pruebas].[dbo].[RollosEmbarque].[IDRollo] as [ro].[IDRollo]))
|--Compute Scalar(DEFINE:([Expr1008]=(CONVERT(varchar(30),[Pruebas].[dbo].[RollosEmbarque].[Posicion] as [ro].[Posicion],0)+'/')+CONVERT(varchar(30),[Pruebas].[dbo].[RollosEmbarque].[Cortes] as [ro].[Cortes],0)))
| |--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[RollosEmbarque].[PK_RollosEmbarque] AS [ro]), ORDERED FORWARD)
|--Compute Scalar(DEFINE:([Expr1014]=CASE WHEN [Pruebas].[dbo].[Salidas].[Referencia] as [s].[Referencia] like 'TP%' THEN 'ACERO PRIME RAMOS' ELSE '' END, [Expr1015]=CASE WHEN [Pruebas].[dbo].[Salidas].[Referencia] as [s].[Referencia] like 'TP%' THEN 'T' ELSE 'V' END))
|--Clustered Index Scan(OBJECT:([Pruebas].[dbo].[Salidas].[PK_Salidas] AS [s]), WHERE:(NOT [Pruebas].[dbo].[Salidas].[Referencia] as [s].[Referencia] like 'T[AM]%' AND ([Pruebas].[dbo].[Salidas].[IDPlanta] as [s].[IDPlanta]='APRAMOS' OR [Pruebas].[dbo].[Salidas].[IDPlanta] as [s].[IDPlanta]='APSLP' OR [Pruebas].[dbo].[Salidas].[IDPlanta] as [s].[IDPlanta]='LAGERMEX-PUE' OR [Pruebas].[dbo].[Salidas].[IDPlanta] as [s].[IDPlanta]='LAGERMEX-SAL')) ORDERED FORWARD)