17/02/2012, 20:52
|
| | | Fecha de Ingreso: octubre-2007 Ubicación: España
Mensajes: 1.091
Antigüedad: 17 años, 2 meses Puntos: 85 | |
Respuesta: Sql server 2008 lento La optimización de un proceso se hace a diferentes niveles y siguiendo un orden, y los índices, aunque sean importantes, se suelen dejar para el final.
En este caso, primero deberías optimizar la lógica del proceso, puedes actualizar la tabla TablaContactos con un solo update en vez de 4300 update dentro del loop.
Set rs = ConData.Execute("Select ClienteCodigo,ClienteComercial From TablaClientes Where ClienteComercial = 'Pedro' ")
Do While Not rs.EOF
sSQL_1="UPDATE TablaContactos SET ContactoComercial='Cliente de Pedro' WHERE ContactoCodigoCliente = rs("ClienteCodigo")"
Set RS_1 = ConData.Execute(sSQL_1)
rs.MoveNext
Loop
rs.Close
vs
Set rs = ConData.Execute("update TablaContactos
set ContactoComercial='Cliente de Pedro'
from TablaClientes
where
TablaClientes.ClienteCodigo = TablaContactos.ContactoCodigoCliente
and TablaClientes.ClienteComercial = 'Pedro'")
Lo segundo es evaluar las diferencias entre SQL Server y Access, es cierto que SQL Server tiene mejor tiempo de respuesta en las consultas pero también tiene más costo en la gestión de las sesiones por lo que deberías optimizar los accesos a la base, por ejemplo en el caso del loop:
'Loop en la aplicación, se ejecutan 10 sentencias
var i int=1
Do While i < 10
sSQL="UPDATE t1 SET id=" + i + "
Set RS = ConData.Execute(sSQL)
i = i + 1
Loop
vs
'Loop en la base de datos, se ejecuta 1 sentencia
sSQL="declare @i int
set @i = 1
while @i < 10
begin
update t1 set id = @i
set @i = @i + 1
end"
Set rs = ConData.Execute(sSQL)
Y en tercer lugar los índices, para esto debes analizar el plan de ejecución de las consultas, a simple vista se podría sugerir indexar los campos CodigoCliente y ClienteComercial.
Saludos |