SQL Server - Optimizacion Consulta

 
Vista:

Optimizacion Consulta

Publicado por Carlos Reyes (49 intervenciones) el 23/10/2007 22:19:51
Hola amigos que tal, veran, tengo un pequeño problema; tengo una aplicacion WEB en la cual tras realizar una consulta obtengo un error de timeout por parte de la pagina; esto por que mi consulta trae demasiados registros.

La consulta necesita realizar un match entre los registros de las 2 tablas; el problema aqui es que una tabla tiene cerca de 400,000 registros, y la otra cerca de 50,000, y pues obiamente al hacer el match pues si tarda un buen rato en obtener los registros; ne cesito reducir ese tiempo de consulta drasticamente, pero no tengo la mas minima idea de como hacerlo, como se podran imaginar, la consulta es sencilla, ya que solo hace falta agrupar por los campos llaves, pero, como optimizo al maximo...

Saludos.
Carlos Reyes
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Optimizacion Consulta

Publicado por Isaias (3308 intervenciones) el 23/10/2007 23:50:39
Muestranos tu consulta y dinos, que campos son INDICES en tus tablas.

Ademas, ¿Tienes establecido un PLAN DE MANTEINMIENTO que te haga la depuracion de tu LOG de transacciones?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizacion Consulta

Publicado por Carlos Reyes (49 intervenciones) el 24/10/2007 00:57:52
CREATE Procedure Pa_ConsultaClientesAsignados
@Asesor Varchar(6)='',
@TipoFiltro Char(1)='',
@TipoConsulta Char(1)='',
@ValorFiltro Varchar(256)=''
As

Set Quoted_Identifier off

Declare @Cadena Varchar(7000)
Declare @CadenaNoAsignados Varchar(2500)
Declare @CadenaAsignados Varchar(2500)
Declare @Filro Varchar(150)

set @CadenaNoAsignados=''
set @CadenaAsignados = ''

Set @CadenaNoAsignados = " Select 0 as Asignado, Cli_Codigo, Cli_Nombre,Cli_RazonS From Clientes With(Nolock) " +
" Where not Exists (Select cli_Client from Clienase With(Nolock) Where Cli_Client=cli_Codigo) "
Set @CadenaAsignados = " Select 1 as Asignado, Cli_Codigo, Cli_Nombre,Cli_RazonS From Clientes With(Nolock) " +
" Where Exists (Select cli_Client from Clienase With(Nolock) Where Cli_Client=cli_Codigo " +
" And cli_Asesor= '" +@Asesor+"')"
if (@TipoConsulta ='1')
Set @Filro = " And Cli_Codigo Like '%"+ @ValorFiltro +"%'"
if (@TipoConsulta ='2')
Set @Filro = " And Cli_Nombre Like '%"+ @ValorFiltro +"%'"
if (@TipoConsulta ='3')
Set @Filro = " And Cli_RazonS Like '%"+ @ValorFiltro +"%'"
if (@TipoFiltro='1')
Begin
set @Cadena = @CadenaNoAsignados + @Filro + ' Union ' + @CadenaAsignados + @Filro + " Order by Asignado desc,Cli_Nombre,Cli_RazonS "
end
if (@TipoFiltro='2')
Begin
set @Cadena = @CadenaAsignados + @Filro + " Order by Asignado desc,Cli_Nombre,Cli_RazonS "
end
if (@TipoFiltro='3')
Begin
set @Cadena = @CadenaNoAsignados + @Filro + " Order by Asignado desc,Cli_Nombre,Cli_RazonS "
end
Exec (@Cadena)


Mi campo llave es Cli_Codigo para la tabla "Clientes " y cli_Client para la tabla "Clienase"

SALUDOS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizacion Consulta

Publicado por Isaias (3308 intervenciones) el 24/10/2007 01:28:17
Carlos

Lo que me temia, una consulta dinamica, ¿sabias que cuando utilizas conslutas dinamicas, no se hace uso de los indices?

Exec (@Cadena)

¿No podria hacerse sin consulta dinamica?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizacion Consulta

Publicado por Carlos Reyes (49 intervenciones) el 25/10/2007 15:51:49
El problema aqui es que realiza diferentes filtrados en el ASP y pues esto hace que la consulta necesite ser dinamica; mi jefe quiere que lo optimice, pero le comento que no le encuentro forma de optimizarla, 1 por lo que comentas, que esto se debe realizar dinamicamente, y 2 por la cantidad de registros que arroja. En cuanto a lo que me comentas del log, pues realmente no tengo idea, la base de datos es externa, y pues nosotros como compañia no tenemos acceso a esa informacion del cliente

Para mi esta muy dificil optimizarla, o habra alguna forma?

SAludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Optimizacion Consulta

Publicado por Isaias (3308 intervenciones) el 26/10/2007 00:35:27
La optimizacion de una consulta debe ver estos aspectos:

1.- Depuracion del Log de transacciones (Plan de mantenimiento)
2.- Indices correctamente creados.
3.- Separacion del MDF y LDF en diferentes discos (fisicos)
4.- No manejo de Query Dinamico, ya que no hace uso de los indices.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar