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

Preguntas similare

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
>
>


Respuesta Responder a este mensaje
#2 Adrian D. Garcia
03/02/2004 - 18:12 | Informe spam
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


Respuesta Responder a este mensaje
#3 Gustavo Morales
03/02/2004 - 20:33 | Informe spam
Muchas gracias por la información. Voy a revisar lo que indicas. Justamente
quiero saber como configurar el SQL Server (corriendo en una pc con un solo
procesador) para que realiza paraleleismo.
Entiendo que tu explicación va por ahi, no?


"Adrian D. Garcia" escribió en el mensaje
news:#
Si, esto va a mejorar la performance pero ten en cuenta que el indice solo
se utilizara siempre y cuando se hagan referencias a las primeras columnas
del indice. Por ejemplo, si solo busco por Nombre_1 y Nombre_2 el indice


no
se va a ultilizar.

Otra forma de obtener un mejor rendimiento es agregar un archivo fisico a


la
base de datos en un disco diferente al que esta la base y definir un nuevo
grupo de archivos. Cuando digo disco me refiero a un disco fisico, no a


otra
particion. Luego recreas los indices de esa tabla en el nuevo grupo (ver


BOL
CREATE INDEX ). Esto te va apermitir paralelizar las entradas/salidas
de los datos y los indices en mayor medida de que si lo tenes todo en el
mismo grupo de archivos..

Saludos
Adrian D. Garcia
MCSD
NDSoft Consultoria y Desarrollo

"Gustavo Morales" wrote in message
news:
> 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
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#4 Maximiliano D. A.
03/02/2004 - 20:46 | Informe spam
mmm disculpen la intromision no!!

lo que te indica Adrian es correcto y seria optimo tener en mas de un
archivo en discos fisicos distintos esas cosas, ahora el paralelismo es otra
cosa y necesitaras 2 procesadores o sacrificar el procesador actual (cosa
que no recomiendo)

Salu2

Maximiliano Damian Accotto


"Gustavo Morales" escribió en el mensaje
news:OX$
Muchas gracias por la información. Voy a revisar lo que indicas.


Justamente
quiero saber como configurar el SQL Server (corriendo en una pc con un


solo
procesador) para que realiza paraleleismo.
Entiendo que tu explicación va por ahi, no?


"Adrian D. Garcia" escribió en el mensaje
news:#
> Si, esto va a mejorar la performance pero ten en cuenta que el indice


solo
> se utilizara siempre y cuando se hagan referencias a las primeras


columnas
> del indice. Por ejemplo, si solo busco por Nombre_1 y Nombre_2 el indice
no
> se va a ultilizar.
>
> Otra forma de obtener un mejor rendimiento es agregar un archivo fisico


a
la
> base de datos en un disco diferente al que esta la base y definir un


nuevo
> grupo de archivos. Cuando digo disco me refiero a un disco fisico, no a
otra
> particion. Luego recreas los indices de esa tabla en el nuevo grupo (ver
BOL
> CREATE INDEX ). Esto te va apermitir paralelizar las


entradas/salidas
> de los datos y los indices en mayor medida de que si lo tenes todo en el
> mismo grupo de archivos..
>
> Saludos
> Adrian D. Garcia
> MCSD
> NDSoft Consultoria y Desarrollo
>
> "Gustavo Morales" wrote in message
> news:
> > 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
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
#5 Maximiliano D. A.
03/02/2004 - 20:54 | Informe spam
Otra opcion es usar tecnologia HT, cosa que en las pruebas que he realizado
y por otros comentarios, se lleva bastante mal con SqlServer.

Salu2

Maximiliano Damian Accotto


"Maximiliano D. A." <maxi_accotto[arroba]speedy[.]com[.]ar> escribió en el
mensaje news:
mmm disculpen la intromision no!!

lo que te indica Adrian es correcto y seria optimo tener en mas de un
archivo en discos fisicos distintos esas cosas, ahora el paralelismo es


otra
cosa y necesitaras 2 procesadores o sacrificar el procesador actual (cosa
que no recomiendo)

Salu2

Maximiliano Damian Accotto


"Gustavo Morales" escribió en el mensaje
news:OX$
> Muchas gracias por la información. Voy a revisar lo que indicas.
Justamente
> quiero saber como configurar el SQL Server (corriendo en una pc con un
solo
> procesador) para que realiza paraleleismo.
> Entiendo que tu explicación va por ahi, no?
>
>
> "Adrian D. Garcia" escribió en el


mensaje
> news:#
> > Si, esto va a mejorar la performance pero ten en cuenta que el indice
solo
> > se utilizara siempre y cuando se hagan referencias a las primeras
columnas
> > del indice. Por ejemplo, si solo busco por Nombre_1 y Nombre_2 el


indice
> no
> > se va a ultilizar.
> >
> > Otra forma de obtener un mejor rendimiento es agregar un archivo


fisico
a
> la
> > base de datos en un disco diferente al que esta la base y definir un
nuevo
> > grupo de archivos. Cuando digo disco me refiero a un disco fisico, no


a
> otra
> > particion. Luego recreas los indices de esa tabla en el nuevo grupo


(ver
> BOL
> > CREATE INDEX ). Esto te va apermitir paralelizar las
entradas/salidas
> > de los datos y los indices en mayor medida de que si lo tenes todo en


el
> > mismo grupo de archivos..
> >
> > Saludos
> > Adrian D. Garcia
> > MCSD
> > NDSoft Consultoria y Desarrollo
> >
> > "Gustavo Morales" wrote in message
> > news:
> > > 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
> > > > >
> > > > >
> > > >
> > > >
> > >
> > >
> >
> >
>
>


Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida