Optiimización SQL dinámico.

10/12/2008 - 18:06 por Pedro J. Reguera | Informe spam
Hola,
Tengo una aplicación que construye dinámicamente una sentencia SQL.
La pregunta es:
¿qué es más eficiente, desde asp.net construir el SQL y traerme los datos en
un datareader ejecutando la sentencia SQL o...
pasarle una cadena como un parámetro a un procedimiento almacenado para que
este ejecute la misma tipo "EXECUTE(@vstrSQL) y devuelva los datos para
poblar el datareader?.

Gracias y un saludo.
Pedro J.

Preguntas similare

Leer las respuestas

#1 Alfredo Novoa
10/12/2008 - 18:24 | Informe spam
Hola Pedro,

El Wed, 10 Dec 2008 18:06:01 +0100, Pedro J. Reguera escribió:

Hola,
Tengo una aplicación que construye dinámicamente una sentencia SQL.
La pregunta es:
¿qué es más eficiente, desde asp.net construir el SQL y traerme los datos en
un datareader ejecutando la sentencia SQL o...



Esta.


Saludos
Respuesta Responder a este mensaje
#2 Alejandro Mesa
10/12/2008 - 18:48 | Informe spam
Pedro J. Reguera,

Pudieras expandir sobre como creas la cadena dinamicamente?

Lo mas importante es que esa sentencia este parametrizada, osea que use
parametros para no tener que concatenar los valores como parte de la cadena,
pues eso es lo que causa que el cache de planes de ejecucion crezca
desorbitadamente, puesto que para reusar un plan de ejecucion la cadena,
batch o sentencia, debe machar exactamente.


AMB


"Pedro J. Reguera" wrote:

Hola,
Tengo una aplicacin que construye dinmicamente una sentencia SQL.
La pregunta es:
qu es ms eficiente, desde asp.net construir el SQL y traerme los datos en
un datareader ejecutando la sentencia SQL o...
pasarle una cadena como un parmetro a un procedimiento almacenado para que
este ejecute la misma tipo "EXECUTE(@vstrSQL) y devuelva los datos para
poblar el datareader?.

Gracias y un saludo.
Pedro J.

Respuesta Responder a este mensaje
#3 Alejandro Mesa
10/12/2008 - 18:50 | Informe spam
Se me paso ajuntar este magnifico articulo de como usar sql dinamico
correctamente.

The Curse and Blessings of Dynamic SQL
http://www.sommarskog.se/dynamic_sql.html


AMB

"Alejandro Mesa" wrote:

Pedro J. Reguera,

Pudieras expandir sobre como creas la cadena dinamicamente?

Lo mas importante es que esa sentencia este parametrizada, osea que use
parametros para no tener que concatenar los valores como parte de la cadena,
pues eso es lo que causa que el cache de planes de ejecucion crezca
desorbitadamente, puesto que para reusar un plan de ejecucion la cadena,
batch o sentencia, debe machar exactamente.


AMB


"Pedro J. Reguera" wrote:

> Hola,
> Tengo una aplicacin que construye dinmicamente una sentencia SQL.
> La pregunta es:
> qu es ms eficiente, desde asp.net construir el SQL y traerme los datos en
> un datareader ejecutando la sentencia SQL o...
> pasarle una cadena como un parmetro a un procedimiento almacenado para que
> este ejecute la misma tipo "EXECUTE(@vstrSQL) y devuelva los datos para
> poblar el datareader?.
>
> Gracias y un saludo.
> Pedro J.
>
Respuesta Responder a este mensaje
#4 Alfredo Novoa
10/12/2008 - 19:02 | Informe spam
Hola Alejandro,

El Wed, 10 Dec 2008 09:48:11 -0800, Alejandro Mesa escribió:

Lo mas importante es que esa sentencia este parametrizada, osea que use
parametros para no tener que concatenar los valores como parte de la cadena,
pues eso es lo que causa que el cache de planes de ejecucion crezca
desorbitadamente, puesto que para reusar un plan de ejecucion la cadena,
batch o sentencia, debe machar exactamente.



machar.

(De macho).

1. tr. Golpear para quebrantar algo.

http://buscon.rae.es/draeI/SrvltCon...EMA=machar

;-)


Saludos
Respuesta Responder a este mensaje
#5 Jose TH
10/12/2008 - 19:13 | Informe spam
Hola,
Tengo una aplicación que construye dinámicamente una sentencia SQL.
La pregunta es:
¿qué es más eficiente, desde asp.net construir el SQL y traerme los datos
en un datareader ejecutando la sentencia SQL o...
pasarle una cadena como un parámetro a un procedimiento almacenado para
que este ejecute la misma tipo "EXECUTE(@vstrSQL) y devuelva los datos
para poblar el datareader?.




No sé si la idea de tu pregunta es sobre eficiencia en el servidor o en cómo
hacer la llamada en tu aplicación.
Desde tu aplicación, si no hay parámetros, con ese Execute() estarías
prácticamente suplantando lo que ya hace el datareader al ejecutarlo
(ExecuteReader). Si los hay, el datareader ya sabrá que debe usar
sp_ExecuteSQL para la llamada parametrizada. Por tanto, si te entendí
bien, deja que el datareader se encargue, que para eso está.
Si tienes dudas de lo que "manda" el datareader al servidor, usa el Profiler
de SQL Server para visualizarlo.
Si, como te dijo Alejandro, te interesa que se guarde el plan de ejecución,
trata de que la instrucción con su tipo y cantidad de parámetros sea la
misma siempre y que sólo cambien los valores de los parámetros.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida