Por que demora tanto!!!!!!

03/02/2004 - 09:42 por Gustavo Morales | Informe spam
Select [Ap. Paterno] = P.A_Paterno, [Ap. Materno] = P.A_Materno, [Nombre] LTrim(RTrim(P.Nombre_1)) + ' ' + LTrim(RTrim(P.Nombre_2)), P.CUSSP,
P.DOCIDEN, P.Sexo, P.Fecha_Nac, P.Domicilio, P.Distrito, P.Telefono, P.RUC,
P.EMail, P.Promedio From Persona P With(Index(Ix_Per_Nombre)) Inner Join
Empresa E On P.RUC = E.RUC Where P.A_Paterno Like '%lopez%' And P.A_Materno
Like '%saldivar%' And (P.Nombre_1 + ' ' + P.Nombre_2) Like '%%'

El Plan de ejecucion de esta consulta tomo 8:35 minutos en genrarse. Por que
tanto?
Por favor, alguien tiene un documento o guia para configurar adecuadamente
(para optimizar consultas desde VB) el SQL Server.
Necesito sobre todo devolver rapidamente registro, pero siempre resultan
consultas lentas, muy muy lentas.
Ayudenme.

Gracias
 

Leer las respuestas

#1 Gustavo Morales
03/02/2004 - 14:40 | Informe spam
He logrado manejar mejor la respuesta con este SP
Es Dinamico pero los parametros pueden variar o no llegar todos.
Tengo varios indices. Aqui uso uno compuesto por A_Paterno, A_Materno,
Nombre_1 y Nombre_2
Esta bien, no?

Gracias por la atencion

CREATE PROCEDURE sp_ListaPersonasNombre @Paterno Varchar(50) = Null,
@Materno Varchar(50) = Null, @Nombre Varchar(50) = Null, @RUC Char(11) Null
AS
Declare @strQuery As Varchar(5000)
Set @strQuery = 'Select [Ap. Paterno] = P.A_Paterno, ' +
'[Ap. Materno] = P.A_Materno, ' +
'[Nombre] = LTrim(RTrim(P.Nombre_1)) + '' '' + LTrim(RTrim(P.Nombre_2)),
' +
'P.CUSSP, ' +
'P.DOCIDEN, ' +
'P.RUC ' +
'From Persona P With(Index(Ix_Per_Nombre)) ' +
'Inner Join Empresa E ' +
'On P.RUC = E.RUC Where '

If @Paterno Is Not Null
Set @strQuery = @strQuery + 'P.A_Paterno Like ''' + @Paterno + '%'' '

If @Materno Is Not Null
Begin
If @Paterno Is Not Null
Set @strQuery = @strQuery + 'And P.A_Materno Like ''' + @Materno + '%'' '
Else
Set @strQuery = @strQuery + 'P.A_Materno Like ''' + @Materno + '%'' '
End

If @Nombre Is Not Null
Begin
If (@Paterno Is Not Null Or @Materno Is Not Null)
Set @strQuery = @strQuery + 'And P.Nombre_1 + ''' + ''' + P.Nombre_2 Like
''%' + @Nombre + '%'' '
Else
Set @strQuery = @strQuery + 'P.Nombre_1 + ''' + ''' + P.Nombre_2 Like
''%' + @Nombre + '%'' '
End

If @RUC Is Not Null
Begin
If (@Paterno Is Not Null Or @Materno Is Not Null Or @Nombre Is Not Null)
Set @strQuery = @strQuery + 'And P.RUC = ''' + @RUC + ''''
Else
Set @strQuery = @strQuery + 'P.RUC = ''' + @RUC + ''''
End

Print @strQuery

Exec (@strQuery)
GO

"Adrian D. Garcia" escribió en el mensaje
news:#
Hola Gustavo,

Cuando haces un filtro del tipo

P.A_Paterno Like '%lopez%'

A SQL Server no le queda otro remedio que realizar untable scan o un


cluster
index scan sobre la tabla, eso significa que ira leyendo fila a fila de la
tabla y luego realizara la comparacion. Por tus otras consultas estimo que
es la famosa tabla de 9.000.000 de filas.
Si tienes indices sobre las columnas de caracteres, por ejemplo, A_Paterno
consultando de esta forma

P.A_Paterno Like 'lopez%'

Si utilizaria el indice correctamente, auqnue veo que estas consultando


por
3columnas de esta forma.

Creo que la solucion que estas buscando es definir indices especiales de
busqueda de texto. Fijate en los BOL sobre el tema "Full Text Search".


Creo
que alli encontraras la solucion que estas buscando a tu problema de
rendimiento.

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Gustavo Morales" wrote in message
news:
> Select [Ap. Paterno] = P.A_Paterno, [Ap. Materno] = P.A_Materno,


[Nombre]
> > LTrim(RTrim(P.Nombre_1)) + ' ' + LTrim(RTrim(P.Nombre_2)), P.CUSSP,
> P.DOCIDEN, P.Sexo, P.Fecha_Nac, P.Domicilio, P.Distrito, P.Telefono,
P.RUC,
> P.EMail, P.Promedio From Persona P With(Index(Ix_Per_Nombre)) Inner Join
> Empresa E On P.RUC = E.RUC Where P.A_Paterno Like '%lopez%' And
P.A_Materno
> Like '%saldivar%' And (P.Nombre_1 + ' ' + P.Nombre_2) Like '%%'
>
> El Plan de ejecucion de esta consulta tomo 8:35 minutos en genrarse. Por
que
> tanto?
> Por favor, alguien tiene un documento o guia para configurar


adecuadamente
> (para optimizar consultas desde VB) el SQL Server.
> Necesito sobre todo devolver rapidamente registro, pero siempre resultan
> consultas lentas, muy muy lentas.
> Ayudenme.
>
> Gracias
>
>


Preguntas similares