Lentitud al ejecutar procedimiento almacenado contra método .FindFirst y SELECT

06/04/2009 - 17:44 por José A. Giménez [Py] | Informe spam
Saludos a todos, estos probando mostrar datos en un formulario de access
2007, lo hago mediante un procedimiento almacenado en SQl Server Exress
2008, al que le envio un parámetro y me devuelve los datos que necesito. Son
pocos campos, con informacion toda de tipo texto.
Llamo al procedimiento por código almacenado usando ADO.
He leido que siempre es mejo utilizar procedimientos almacenados para
realizar las grabaciones y modificaciones en los registros de una base en
SQl Server Express 2008 para ganar efeiciencia.
He probado con varios código apra ver cual es más rápido, incluso u código
que no ejecuta procedimiento almacenado y lo hace haciendo directamente un
SELECT sobre la tabla.
El código que más rápido trae los datos no es el del procedimeinto
almacenado, sino en el que uso el método .FindFisrt para localizar el
registro y mostrar sus datos.
Tenía entendido que el procedimeinto almacenado sería más rápido, la
difencia entre el código con .FindFirst y el procedimiento almacenado es muy
gtande, casi 1 segundo.
No debería ser la llamada al procedimiento almacenado más rápida?
Gracias

Preguntas similare

Leer las respuestas

#11 Alejandro Mesa
07/04/2009 - 16:26 | Informe spam
Algo mas que he notado:

1 - Estas seguro que necesitas nvarchar(255) para almacenar el nombre de la
ciudad?

2 - Crees practico usar una tabla para almacenar los contactos, en vez de
usar grupos repetitivos como "contacto1, telefono_contacto1, contacto2,
telefono_contacto2".?

3 - Estas seguro de necesitar 100 caracteres para almacenar el # de telefono?


AMB



"Alejandro Mesa" wrote:

José A. Giménez [Py],

Tengo dos recomendaciones para tratar de mejorar el tiempo de respuesta de
tu aplicacion.

1 - Adiciona la sgte linea a tu stored procedure, como primera linea despues
de "AS".

SET NOCOUNT ON;

Esto evitara que el mensaje sobre filas afectadas sea devuelto hacia la
aplicacion cliente y por tanto sera algo menos que procesar. No recuerdo
bien, pero creo que los parametros de salida, junto con el valors de retorno,
van en el ultimo paquete enviado hacia la aplicacion cliente. Si no tenemos
nada que enviar antes de estos, entonces sera mas rapido.

2 - Crees que puedas postear la estructura de la tabla, including
restricciones e indices.

Por lo que puedo apreciar, usas el nombre del banco para identificar
unicamente cada file en la tabla, correcto?

Me pregunto si esta columna es la clave primaria de la tabla, porque de ser
asi, te recomendaria usar una columna que ocupe menos espacio, como integer,
algo asi como "BancoID INT NOT NULL".


AMB


"José A. Giménez [Py]" wrote:

> Pregunto, cómo hacen ustedes para trabajar con el SQL Server y no tener
> estos problemas?
> Tienen aplicaciones que llaman al SQL? o cómo lo hacen?
> La verdad es que es tremendamente frustrante notar que lo que debería se más
> eficiente resulta todo lo contrario,
> me estoy preguntando si en en realidad vale la pena cambiar a SQL Server mi
> aplicación y mantenerla con Access, ya que si la llamada a una tabla que
> tiene un registro tarda tanto, no me imagino cuando tenga 1000 registros...
> He preguntado sobre cómo sería más eficiente, me recomendaron no vincular
> las tablas desde Access, ya que con el tiempo esto se vuelve muy lento (me
> consta), probé usando código directamente enviando una cadena SQL para
> obtener resultados de la base de datos , probé usando el método
> .findFirst... entonces me encontré con la idea de que usando un
> procedimiento almacenado "volaría" en fin, por favor, sáquenme de este
> mar de ignorancia, porque no se ya que hacer para esto funcione... cómo lo
> hacen ustedes???
>
> Gracias!
>
Respuesta Responder a este mensaje
#12 José A. Giménez [Py]
07/04/2009 - 16:36 | Informe spam
Gracias Carlos, bueno, perdón por la desesperación segyiré tus consejos
y seguiré probando, mil gracias
Respuesta Responder a este mensaje
#13 José A. Giménez [Py]
07/04/2009 - 16:39 | Informe spam
Gracias Alejandro por tus respuestas, voy a probar, realmente me señalaste
algo que no había llevado en cuenta. La base de datos se exportó
directamente desde access y está trabajando sobre un sistema hecho en
access, la que yo tengo en el SQL Server es para las pruebas de migración,
pero en realidad no aposté a mejorar el diseño y las cosas raras de esas
tablas, voy a seguir tus indicaciones. Gracias!
Respuesta Responder a este mensaje
#14 José A. Giménez [Py]
07/04/2009 - 16:47 | Informe spam
Esta es la cadena de conexion que uso en el codigo:

cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Datos Upisa; " & _
"Data Source=SQLSERVER\SQLEXPRESS; " & _
"integrated security=SSPI; persist security info=True;"

He notado que cuando el SQL Serve Management Studio está abierto, el proceso
se ejecuta "volando", al cerrarlo comienza a dar problemas. Existe algún
otro método de conexión?
Respuesta Responder a este mensaje
#15 José A. Giménez [Py]
07/04/2009 - 16:57 | Informe spam
Hola Carlos, he puesto timers y he notado que como dices, la conexion es lo
que tarda mucho, en varias pruebas he obtenido resultados que van desde 0,28
a 0,68 segundos para la conexión, un valor de 0,09375 en la ejecución del
procedimiento almacenado, paso de los parámetros y display en el form

Esta el cadena de conexio que uso por código:
Set cnn = Nothing
Dim cnn As ADODB.connection

cnn.Open "Provider=SQLOLEDB; " & _
"Initial Catalog=Datos Upisa; " & _
"Data Source=SQLSERVER\SQLEXPRESS; " & _
"integrated security=SSPI; persist security info=True;"

Tienes alfuna sugerencia para hacer la conexión má rápido?
Mil gracias por el apoyo y la ayuda, relmente te lo agradezco
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida