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