Diseño de indices

03/05/2008 - 18:20 por Diego M Romero | Informe spam
Hola
Todos

Tengo un problema con una base de datos, cada vez son mas lentas las
consultas,

Un procedimiento almacenado con varias consultas con UNION, se está
demorando demasiado. El servidor tiene 2GB
de memoria.

¿ Será mal diseño de indices ?

¿ Si se crea un índice, es necesario incluir las columnas que forman la
clave primaria en este índice ?

¿ Será por el tipo de condiciones con parámetros opcionales WHERE
Columna1 LIKE ISNULL(@Parametro1,'%') AND Columna2 LIKE
ISNULL(@Parametro2,'%') AND ?

Espero me puedan dar una luz

Gracias

Diego M Romero

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
04/05/2008 - 00:40 | Informe spam
Diego M Romero,

Para poderte ayudar necesitamos mas informacion. Crees que puedas postear la
estructura de las tablas involucradas en la consulta, incluyendo
restricciones e indices. Tambien el codigo de la sentencia asi como su plan
de ejecucion.


AMB

"Diego M Romero" wrote:

Hola
Todos

Tengo un problema con una base de datos, cada vez son mas lentas las
consultas,

Un procedimiento almacenado con varias consultas con UNION, se está
demorando demasiado. El servidor tiene 2GB
de memoria.

¿ Será mal diseño de indices ?

¿ Si se crea un índice, es necesario incluir las columnas que forman la
clave primaria en este índice ?

¿ Será por el tipo de condiciones con parámetros opcionales WHERE
Columna1 LIKE ISNULL(@Parametro1,'%') AND Columna2 LIKE
ISNULL(@Parametro2,'%') AND ?

Espero me puedan dar una luz

Gracias

Diego M Romero




Respuesta Responder a este mensaje
#2 Diego M Romero
06/05/2008 - 22:42 | Informe spam
Estuve tratando de enviarle los script a esta cuenta de correo, pero me la
rechaza.

Delivery to the following recipient failed permanently:




Las coloco aquí ?


Diego M Romero


"Alejandro Mesa" escribió en el
mensaje news:
Diego M Romero,

Para poderte ayudar necesitamos mas informacion. Crees que puedas postear
la
estructura de las tablas involucradas en la consulta, incluyendo
restricciones e indices. Tambien el codigo de la sentencia asi como su
plan
de ejecucion.


AMB

"Diego M Romero" wrote:

Hola
Todos

Tengo un problema con una base de datos, cada vez son mas lentas las
consultas,

Un procedimiento almacenado con varias consultas con UNION, se está
demorando demasiado. El servidor tiene 2GB
de memoria.

¿ Será mal diseño de indices ?

¿ Si se crea un índice, es necesario incluir las columnas que forman la
clave primaria en este índice ?

¿ Será por el tipo de condiciones con parámetros opcionales WHERE
Columna1 LIKE ISNULL(@Parametro1,'%') AND Columna2 LIKE
ISNULL(@Parametro2,'%') AND ?

Espero me puedan dar una luz

Gracias

Diego M Romero




Respuesta Responder a este mensaje
#3 Diego M Romero
09/05/2008 - 18:51 | Informe spam
Esta es la consulta

Puedo colocar las estructuras de tablas aquí (600 KB) ó me das un correo
para enviarla.

Gracias

Diego M Romero

SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS OFF
GO

CREATE PROCEDURE paQryVencimientosLca @pmSaldo DECIMAL(14,2),@pmFecActual
SMALLDATETIME,@pmTipDoc VARCHAR(3)=Null
,@pmIdCia CHAR(2)=Null,@pmIdCliente VARCHAR(16)=Null,@pmIdAgencia
VARCHAR(16)=Null,@pmIdVend VARCHAR(16)=Null
,@pmFechaIni SMALLDATETIME=Null,@pmFechaFin SMALLDATETIME=Null
AS
SELECT IdCliente,T.RazonSocial AS NomCliente,V.IdAgencia AS
CdAgencia,Agencia,TipDoc,TipoDoc,Factura,V.IdCia AS CdCia,Compania,Item
,VrFactura,VrAbonado,VrFactura-VrAbonado AS
ValorSaldo,Fecha,FechaVence,DATEDIFF(day,FechaVence,@pmFecActual) AS
DiasMora
,V.IdConcepto AS CdConcepto,Concepto,V.Referencia AS
FacReferencia,Detalle,V.IdVend AS CdVend,VN.RazonSocial AS
Vendedor,V.Comision AS TarifComs
,TarifDcto,TipoDcto,TipoBase,FecLmtDcto,TipRef,DocRef,IdCiaRef,FecUltPago,NumNota,IdCiaNot,TarifInt,FecLiqMora
,T.TipoId AS TercTipo,T.Dv AS TercDv,T.Codigo AS TercCodigo,T.NomCial AS
TercNomCial,T.SiglaRaz AS TercSigal,T.Direccion AS TercDireccion
,T.IdLocal AS TercCdCiudad,L.Localidad AS NomCiudad,L.IdDep AS
CdDep,D.Departamento AS TercDpto,T.Telefono AS TercTelefono,T.Fax AS
TercFax,T.e_mail AS TercEmail
,T.SitioWeb AS TercSitioWeb,T.IdSector AS CdSector,SectorEco,T.IdRegimen AS
CdRegimen,Regimen,T.TipEnte AS TercTipEnte
,CLI.IdSzona AS CdSubzona,Subzona,Zona,CLI.IdGrupo AS
CdGrupoCli,GrupoClie,VrCupo,VrSaldo,Contrato,CLI.NContrato AS CliNumContrato
,CodAgencia,A.DirAgncia AS AgeDireccion,A.TelAgncia AS
AgeTelefono,A.FaxAgncia AS AgeFax,A.IdLocal AS AgeIdCiudad,LA.Localidad AS
AgeCiudad,LA.IdDep AS AgeCodDep
,DA.Departamento AS AgeDpto,A.Referencia AS AgeReferencia,A.NContrato AS
AgeNumContrato,CiaCont
FROM Trn_Vencimientos AS V INNER JOIN Terceros AS T ON
V.IdCliente=T.IdTercero
INNER JOIN Agencias AS A ON V.IdAgencia=A.IdAgencia INNER JOIN
Sys_TiposDoc AS TD ON V.TipDoc=TD.IdDoc
INNER JOIN Companias AS CI ON V.IdCia=CI.IdCia INNER JOIN Terceros AS VN
ON V.IdVend=VN.IdTercero
INNER JOIN TercCliente AS CLI ON V.IdCliente=CLI.IdClie INNER JOIN Subzonas
AS SZ ON CLI.IdSzona=SZ.IdSzona
INNER JOIN Zonas AS Z ON SZ.IdZona=Z.IdZona INNER JOIN GruposCli AS GC ON
CLI.IdGrupo=GC.IdGrupo
INNER JOIN Localidades AS LA ON A.IdLocal=LA.IdLocal INNER JOIN
Departamentos AS DA ON LA.IdDepÚ.IdDep
INNER JOIN Localidades AS L ON T.IdLocal=L.IdLocal INNER JOIN
Departamentos AS D ON L.IdDep=D.IdDep
INNER JOIN RegimenDian AS RG ON T.IdRegimen=RG.IdRegimen INNER JOIN
SectoresEco AS SE ON T.IdSector=SE.IdSector
LEFT JOIN Conceptos AS C ON V.IdConcepto=C.IdConcepto
WHERE (VrFactura-VrAbonado)>@pmSaldo AND TipDoc LIKE ISNULL(@pmTipDoc,'%')
AND V.IdCia LIKE ISNULL(@pmIdCia,'%%')
AND IdCliente LIKE ISNULL(@pmIdCliente,'%') AND V.IdAgencia LIKE
ISNULL(@pmIdAgencia,'%')
AND V.IdVend LIKE ISNULL(@pmIdVend,'%')
AND (Fecha>=ISNULL(@pmFechaIni,CAST('19100101' AS SMALLDATETIME)) AND
Fecha<=ISNULL(@pmFechaFin,CAST('20781230' AS SMALLDATETIME)))
UNION
SELECT IdCliente,T.RazonSocial AS NomCliente,V.IdAgencia AS
CdAgencia,Agencia,'SAF','SALDO A FAVOR',0,V.IdCia AS CdCia,Compania,0
,SUM(VrAFavor-VrOtrosDb) AS VrFactura,SUM(VrAbono) AS
VrAbonado,SUM(((VrAFavor-VrOtrosDb)-VrAbono)*-1) AS
ValorSaldo,@pmFecActual,@pmFecActual,0
,'SAF','SALDO A FAVOR','','SALDO A FAVOR',V.IdVend AS CdVend,VN.RazonSocial
AS Vendedor,0,0,'','',Null,'',0,'00',Null,0,'00',0,Null
,T.TipoId AS TercTipo,T.Dv AS TercDv,T.Codigo AS TercCodigo,T.NomCial AS
TercNomCial,T.SiglaRaz AS TercSigal,T.Direccion AS TercDireccion
,T.IdLocal AS TercCdCiudad,L.Localidad AS NomCiudad,L.IdDep AS
CdDep,D.Departamento AS TercDpto,T.Telefono AS TercTelefono,T.Fax AS
TercFax,T.e_mail AS TercEmail
,T.SitioWeb AS TercSitioWeb,T.IdSector AS CdSector,SectorEco,T.IdRegimen AS
CdRegimen,Regimen,T.TipEnte AS TercTipEnte
,CLI.IdSzona AS CdSubzona,Subzona,Zona,CLI.IdGrupo AS
CdGrupoCli,GrupoClie,VrCupo,VrSaldo,Contrato,CLI.NContrato AS CliNumContrato
,CodAgencia,A.DirAgncia AS AgeDireccion,A.TelAgncia AS
AgeTelefono,A.FaxAgncia AS AgeFax,A.IdLocal AS AgeIdCiudad,LA.Localidad AS
AgeCiudad,LA.IdDep AS AgeCodDep
,DA.Departamento AS AgeDpto,A.Referencia AS AgeReferencia,A.NContrato AS
AgeNumContrato,CiaCont
FROM Trn_RecAfavor AS V INNER JOIN Terceros AS T ON V.IdCliente=T.IdTercero
INNER JOIN Agencias AS A ON V.IdAgencia=A.IdAgencia INNER JOIN Companias
AS CI ON V.IdCia=CI.IdCia
INNER JOIN Terceros AS VN ON V.IdVend=VN.IdTercero INNER JOIN TercCliente
AS CLI ON V.IdCliente=CLI.IdClie
INNER JOIN Subzonas AS SZ ON CLI.IdSzona=SZ.IdSzona INNER JOIN Zonas AS Z
ON SZ.IdZona=Z.IdZona
INNER JOIN GruposCli AS GC ON CLI.IdGrupo=GC.IdGrupo
INNER JOIN Localidades AS LA ON A.IdLocal=LA.IdLocal INNER JOIN
Departamentos AS DA ON LA.IdDepÚ.IdDep
INNER JOIN Localidades AS L ON T.IdLocal=L.IdLocal INNER JOIN
Departamentos AS D ON L.IdDep=D.IdDep
INNER JOIN RegimenDian AS RG ON T.IdRegimen=RG.IdRegimen INNER JOIN
SectoresEco AS SE ON T.IdSector=SE.IdSector
WHERE (VrAFavor-VrOtrosDb)>VrAbono AND V.IdCia LIKE ISNULL(@pmIdCia,'%%')
AND IdCliente LIKE ISNULL(@pmIdCliente,'%')
AND V.IdAgencia LIKE ISNULL(@pmIdAgencia,'%') AND V.IdVend LIKE
ISNULL(@pmIdVend,'%')
GROUP BY
IdCliente,T.RazonSocial,V.IdAgencia,Agencia,V.IdCia,Compania,V.IdVend,VN.RazonSocial
,T.TipoId,T.Dv,T.Codigo,T.NomCial,T.SiglaRaz,T.Direccion,T.IdLocal,L.Localidad,L.IdDep,D.Departamento,T.Telefono
,T.Fax,T.e_mail,T.SitioWeb,T.IdSector,SectorEco,T.IdRegimen,Regimen,T.TipEnte
,CLI.IdSzona,Subzona,Zona,CLI.IdGrupo,GrupoClie,VrCupo,VrSaldo,Contrato,CLI.NContrato,CodAgencia,A.DirAgncia
,A.TelAgncia,A.FaxAgncia,A.IdLocal,LA.Localidad,LA.IdDep,DA.Departamento,A.Referencia,A.NContrato,CiaCont
UNION
SELECT IdCliente,T.RazonSocial AS NomCliente,R.IdAgencia AS
CdAgencia,Agencia,R.TipDoc AS TipDocRec,'CHEQUE',R.Recibo AS
NumRecibo,R.IdCia AS CdCia,Compania,0
,VrForma,0,VrForma AS ValorSaldo,CH.Fecha AS
FecEmision,FecPago,0,'CHE','CHEQUE
POSTFECHADO',Numero,Detalle,CdVend,VN.RazonSocial AS
Vendedor,0,0,'','',Null,'',0,'00',Null,0,'00',0,Null
,T.TipoId AS TercTipo,T.Dv AS TercDv,T.Codigo AS TercCodigo,T.NomCial AS
TercNomCial,T.SiglaRaz AS TercSigal,T.Direccion AS TercDireccion
,T.IdLocal AS TercCdCiudad,L.Localidad AS NomCiudad,L.IdDep AS
CdDep,D.Departamento AS TercDpto,T.Telefono AS TercTelefono,T.Fax AS
TercFax,T.e_mail AS TercEmail
,T.SitioWeb AS TercSitioWeb,T.IdSector AS CdSector,SectorEco,T.IdRegimen AS
CdRegimen,Regimen,T.TipEnte AS TercTipEnte
,CLI.IdSzona AS CdSubzona,Subzona,Zona,CLI.IdGrupo AS
CdGrupoCli,GrupoClie,VrCupo,VrSaldo,Contrato,CLI.NContrato AS CliNumContrato
,CodAgencia,A.DirAgncia AS AgeDireccion,A.TelAgncia AS
AgeTelefono,A.FaxAgncia AS AgeFax,A.IdLocal AS AgeIdCiudad,LA.Localidad AS
AgeCiudad,LA.IdDep AS AgeCodDep
,DA.Departamento AS AgeDpto,A.Referencia AS AgeReferencia,A.NContrato AS
AgeNumContrato,CiaCont
FROM Trn_RecCheques AS R INNER JOIN Trn_Cheques AS CH ON
R.TipDoc=CH.TipRec AND R.Recibo=CH.Recibo AND R.IdCia=CH.IdCia
INNER JOIN Terceros AS T ON R.IdCliente=T.IdTercero
INNER JOIN Agencias AS A ON R.IdAgencia=A.IdAgencia INNER JOIN Companias
AS CI ON R.IdCia=CI.IdCia
INNER JOIN TercCliente AS CLI ON R.IdCliente=CLI.IdClie INNER JOIN
Subzonas AS SZ ON CLI.IdSzona=SZ.IdSzona
INNER JOIN Zonas AS Z ON SZ.IdZona=Z.IdZona INNER JOIN GruposCli AS GC ON
CLI.IdGrupo=GC.IdGrupo
INNER JOIN Localidades AS LA ON A.IdLocal=LA.IdLocal INNER JOIN
Departamentos AS DA ON LA.IdDepÚ.IdDep
INNER JOIN Localidades AS L ON T.IdLocal=L.IdLocal INNER JOIN
Departamentos AS D ON L.IdDep=D.IdDep
INNER JOIN RegimenDian AS RG ON T.IdRegimen=RG.IdRegimen INNER JOIN
SectoresEco AS SE ON T.IdSector=SE.IdSector
LEFT JOIN Terceros AS VN ON CH.CdVend=VN.IdTercero
WHERE CH.Anulado=0 AND R.Anulado=0 AND Documento<=0 AND
CH.IdEstado<>'9998' AND R.IdCia LIKE ISNULL(@pmIdCia,'%%')
AND IdCliente LIKE ISNULL(@pmIdCliente,'%') AND R.IdAgencia LIKE
ISNULL(@pmIdAgencia,'%')
AND CH.CdVend LIKE ISNULL(@pmIdVend,'%')
AND (CH.Fecha>=ISNULL(@pmFechaIni,CAST('19100101' AS SMALLDATETIME)) AND
CH.Fecha<=ISNULL(@pmFechaFin,CAST('20781230' AS SMALLDATETIME)))
ORDER BY T.RazonSocial,FechaVence,V.IdCia,Factura

GO
SET QUOTED_IDENTIFIER OFF
GO
SET ANSI_NULLS ON
GO


"Alejandro Mesa" escribió en el
mensaje news:
Diego M Romero,

Para poderte ayudar necesitamos mas informacion. Crees que puedas postear
la
estructura de las tablas involucradas en la consulta, incluyendo
restricciones e indices. Tambien el codigo de la sentencia asi como su
plan
de ejecucion.


AMB

"Diego M Romero" wrote:

Hola
Todos

Tengo un problema con una base de datos, cada vez son mas lentas las
consultas,

Un procedimiento almacenado con varias consultas con UNION, se está
demorando demasiado. El servidor tiene 2GB
de memoria.

¿ Será mal diseño de indices ?

¿ Si se crea un índice, es necesario incluir las columnas que forman la
clave primaria en este índice ?

¿ Será por el tipo de condiciones con parámetros opcionales WHERE
Columna1 LIKE ISNULL(@Parametro1,'%') AND Columna2 LIKE
ISNULL(@Parametro2,'%') AND ?

Espero me puedan dar una luz

Gracias

Diego M Romero




email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida