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

#1 José A. Giménez [Py]
06/04/2009 - 17:46 | Informe spam
Aclaro que para el procedimeinto almacenado me basé en el código de esta
página:

http://msdn.microsoft.com/en-us/library/aa201830(office.11).aspx

gracias!
Respuesta Responder a este mensaje
#2 José A. Giménez [Py]
06/04/2009 - 18:18 | Informe spam
Gracias por tu respuesta, no lo he revisado, es que no se dónde hacelo.
Tengo la versión Express del SQL Server 2008.
Adicionalmente encontré esto:

http://www.guillesql.es/Articulos/P...ffing.aspx
Respuesta Responder a este mensaje
#3 José A. Giménez [Py]
06/04/2009 - 18:43 | Informe spam
El procedimiento almacenado es muy simple, la tabla solo tiene 1 registro.
En teoria el método .Findfirst es el menos eficiente, sin embargo, de los
que probado, es el más rápido, no entiendo porque es más rápido que el
procedimiento almacenado. Gracias
Este es SP:

USE [Datos Upisa]
GO
/****** Object: StoredProcedure [dbo].[MuestraBanco] Script Date: 04/06/2009
12:40:32 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[MuestraBanco]
@NombreBanco nvarchar(150),
@LaDireccion nvarchar(255)output,
@ElTelBanco nvarchar(20)output,
@ElContacto1 nvarchar(20)output,
@ElTelContacto1 nvarchar(100)output,
@ElContacto2 nvarchar(100)output,
@ElTelContacto2 nvarchar(20)output,
@LaNota nvarchar(255)output,
@LaCiudad nvarchar(255)output
AS
SELECT @NombreBanco=Bancos.NomBanco,
@LaDireccion = Bancos.Direccion,
@ElTelBanco = Bancos.Telefbanc,
@ElContacto1 = Bancos.Contacto1,
@ElTelContacto1=Bancos.TelContac1,
@ElContacto2=Bancos.Contacto2,
@ElTelContacto2=Bancos.TelContac2 ,
@LaNota = Bancos.Notas ,
@LaCiudad = Bancos.Ciudad
FROM Bancos
WHERE Bancos.NomBanco= @NombreBanco
Respuesta Responder a este mensaje
#4 Maxi
06/04/2009 - 19:52 | Informe spam
Hola y que es el metodo findfirst? primero pruebe el procedimiento desde el
Sql Server Management Studio y vea si ahi tarda, si ahi no tarda entonces
sus problemas pueden ser

1= Red
2=El driver de conexion
3= los metodos que usa en la aplicacion para llamar al Store


Salu2

Microsoft MVP SQL Server
Culminis Speaker
www.sqltotalconsulting.com

"José A. Giménez [Py]" <gimenezj(algarroba)hotmail(punto)(com)> escribió en
el mensaje news:
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


Respuesta Responder a este mensaje
#5 José A. Giménez [Py]
06/04/2009 - 20:28 | Informe spam
Gracias por la respuesta. El metodo findFirst se usa cuando se tienen tablas
vinculadas y se busca mediante un recorset. El problema mio según estoy
viendo es lo que se llama parameter sniffing. Cuando ejecuto consultas sobre
la tabla vinculada a SQl Server el proceso es rápido, pero cuando desvinculo
la tabla y llamo mediante una instruccion SQL o bien mediante un
procedimiento almecenado, el proceso tardar más de un segundo para traer un
registro de una tabla que solo tiene cargado 1 registro, con pocos datos.
Mi procedimiento almacenado recibe un paramatro desde Access 2007 y devuelve
los resultados del select con otro parámetros.

Cómo hacen ustedes para evitar el parameter sniffing?
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida