Les explico la situación:
Tengo esta vista:
Código:
Los mensajes que regresa al colocar set statistics io on es:SELECT ro.IDPlanta, gr.CodigoCliente AS Grupo, ro.IDMolino, c.CodigoCliente AS Cliente, ro.IDRollo, ro.NoMaster, ro.NoCase, ro.NoInspeccion,
ro.NoProcesador, ro.NoParte, ro.Revision, ro.IDEspecificacion AS Spec, ro.Dimension, ro.Peso, CONVERT(varchar, ro.Posicion)
+ '/' + CONVERT(varchar, ro.Cortes) AS Corte, ro.FechaRecepcion, ro.FechaCorte, ro.FechaEntrega, CONVERT(varchar, re.NoRemision) AS NoRemision,
ro.Barco, ro.NoViaje, ro.NoFacturaCompra, ro.CostoMXP, ro.CostoUSD, CAST(re.NoFacturaVenta AS varchar) AS NoFacturaVenta, ro.Espesor, ro.Ancho,
ro.Largo, ro.Proceso, ro.IDCliente, ro.RolloPadre, ro.IDMaterial, rd.IDUsuario, rd.TimeStamp, ro.Pedimento, ro.FechaPedimento, ro.Fraccion, ro.Piezas,
re.IDConsignatario, co.NombreCorto AS NombreConsignatario, re.Tipo, op.Nombre AS Operador, re.Observaciones, ro.IDProveedor, ro.CostoFactura,
ro.FechaFacturaCompra, ro.Lote
FROM dbo.RollosEmbarque AS ro INNER JOIN
dbo.Clientes AS c ON ro.IDCliente = c.IDCliente INNER JOIN
dbo.Clientes AS gr ON c.IDGrupo = gr.IDCliente INNER JOIN
dbo.RemisionesDetalle AS rd ON ro.IDRollo = rd.IDRollo INNER JOIN
dbo.Remisiones AS re ON re.NoRemision = rd.NoRemision LEFT OUTER JOIN
dbo.Consignatarios AS co ON re.IDConsignatario = co.IDConsignatario LEFT OUTER JOIN
dbo.Operadores AS op ON re.IDOperador = op.IDOperador
WHERE (re.Estatus = 'C') AND (ro.IDPlanta NOT IN ('APRAMOS', 'APSLP', 'LAGERMEX-PUE', 'LAGERMEX-SAL')) AND (YEAR(re.Fecha) IN (2007, 2008))
UNION ALL
SELECT s.IDPlanta, gr.CodigoCliente AS Grupo, ro.IDMolino, c.CodigoCliente AS Cliente, ro.IDRollo, ro.NoMaster, ro.NoCase, ro.NoInspeccion, ro.NoProcesador,
ro.NoParte, ro.Revision, ro.IDEspecificacion AS Spec, ro.Dimension, ro.Peso, CONVERT(varchar, ro.Posicion) + '/' + CONVERT(varchar, ro.Cortes)
AS Corte, ro.FechaRecepcion, ro.FechaCorte, s.Fecha AS FechaEntrega, s.Referencia AS NoRemision, ro.Barco, ro.NoViaje, ro.NoFacturaCompra,
ro.CostoMXP, ro.CostoUSD, ro.NoFacturaVenta, ro.Espesor, ro.Ancho, ro.Largo, 0 AS Proceso, s.IDCliente, ro.RolloPadre, ro.IDMaterial, s.IDUsuario,
s.TimeStamp, '' AS Pedimento, NULL AS FechaPedimento, '' AS Fraccion, ro.Piezas, 0 AS IDConsignatario, (CASE WHEN (s.Referencia LIKE 'TP%')
THEN 'ACERO PRIME RAMOS' ELSE '' END) AS NombreConsignatario, (CASE WHEN s.Referencia LIKE 'TP%' THEN 'T' ELSE 'V' END) AS Tipo,
'EDI' AS Operador, '' AS Observaciones, ro.IDProveedor, ro.CostoFactura, ro.FechaFacturaCompra, ro.Lote
FROM dbo.Salidas AS s INNER JOIN
dbo.RollosEmbarque AS ro ON s.IDRollo = ro.IDRollo INNER JOIN
dbo.Clientes AS c ON s.IDCliente = c.IDCliente INNER JOIN
dbo.Clientes AS gr ON c.IDGrupo = gr.IDCliente
WHERE (s.Referencia NOT LIKE 'T[AM]%') AND (s.IDPlanta IN ('APRAMOS', 'APSLP', 'LAGERMEX-PUE', 'LAGERMEX-SAL'))
Código:
Por lo cual supongo debo de agregar un índice cubierto, pero no estoy seguro sobre que campos.(115729 filas afectadas) Tabla 'Worktable'. Recuento de exploraciones 0, lecturas lógicas 0, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'Salidas'. Recuento de exploraciones 1, lecturas lógicas 2595, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'RollosEmbarque'. Recuento de exploraciones 2, lecturas lógicas 50470, lecturas físicas 0, lecturas anticipadas 1, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'Clientes'. Recuento de exploraciones 4, lecturas lógicas 32, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'RemisionesDetalle'. Recuento de exploraciones 1, lecturas lógicas 2071, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'Remisiones'. Recuento de exploraciones 1, lecturas lógicas 283, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'Consignatarios'. Recuento de exploraciones 1, lecturas lógicas 5, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0. Tabla 'Operadores'. Recuento de exploraciones 1, lecturas lógicas 2, lecturas físicas 0, lecturas anticipadas 0, lecturas lógicas de LOB 0, lecturas físicas de LOB 0, lecturas anticipadas de LOB 0.
Las estructuras de las tablas con más lecturas son:
Salidas
Cita:
RollosEmbarqueKey->IDRollo varchar(11) Unchecked
Key->IDPlanta varchar(50) Unchecked
Key->Fecha datetime Unchecked
Key->IDCliente smallint Unchecked
Key-> Referencia varchar(50) Unchecked
IDUsuario smallint Unchecked
TimeStamp datetime Unchecked
Key->IDPlanta varchar(50) Unchecked
Key->Fecha datetime Unchecked
Key->IDCliente smallint Unchecked
Key-> Referencia varchar(50) Unchecked
IDUsuario smallint Unchecked
TimeStamp datetime Unchecked
Cita:
RemisionesDetalle Key-> IDRollo varchar(20) Unchecked
Estatus char(1) Unchecked
IDCliente smallint Unchecked
IDPropietario smallint Checked
IDProveedor varchar(50) Checked
IDMolino varchar(50) Unchecked
IDPlanta varchar(50) Unchecked
..... y como 20 campos mas
Estatus char(1) Unchecked
IDCliente smallint Unchecked
IDPropietario smallint Checked
IDProveedor varchar(50) Checked
IDMolino varchar(50) Unchecked
IDPlanta varchar(50) Unchecked
..... y como 20 campos mas
Cita:
Aprovechando, también leyendo, encontré que podría hacer un índice sobre la vista en cuestión cuando se consulta muchas veces, y aunque esto no sea el camino que tomaré (por que un par de las tablas que tiene esa vista se actualizan muy constantemente y al parecer en este caso hacer esto sería contraproducente) me extraña el hecho de que marca error al hacerlo:Key-> NoRemision int Unchecked
Key-> IDRollo varchar(11) Unchecked
NoParte varchar(50) Checked
Revision smallint Checked
Partida smallint Checked
IDUsuario smallint Unchecked
TimeStamp datetime Unchecked
Key-> IDRollo varchar(11) Unchecked
NoParte varchar(50) Checked
Revision smallint Checked
Partida smallint Checked
IDUsuario smallint Unchecked
TimeStamp datetime Unchecked
CREATE unique clustered INDEX clidx_vw_Entregas ON Entregas(IdCliente, IdGrupo, IdRollo);
Error: No se puede crear índice en la vista 'Entregas' porque la vista no está enlazada a ningún esquema.
Espero puedan ayudarme a entender esta teoría, gracias


