Ver Mensaje Individual
  #5 (permalink)  
Antiguo 01/02/2008, 08:57
Avatar de Myakire
Myakire
Colaborador
 
Fecha de Ingreso: enero-2002
Ubicación: Centro de la república
Mensajes: 8.849
Antigüedad: 23 años
Puntos: 146
Re: Duda al crear los índices correctos a fin de optimizar

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)