uso de variables.

22/02/2007 - 22:43 por Hiram Rogelio Santillán Navarro | Informe spam
Por que al momento de usar este select
declare @numero integer
set @numero=5

select * from Tabla where numero = @numero

tarda mas que hacer esto

select * from Tabla where numero = 5

esto por dar un ejemplo.

Por que la situacion real engloba mas uniones
de tablas pero la idea es la anterior.

Preguntas similare

Leer las respuestas

#1 Alejandro Mesa
22/02/2007 - 23:45 | Informe spam
Hiram Rogelio Santillán Navarro,

Desde donde estas probando ese codigo, desde Query Analyzer?

Si lo estas probando desde QA o SSMS, te dire que con la primera opcion
(usando variables) SQL Server usa formulas o estrategias diferentes que
cuando usas parametros, para estimar el numero de filas que machan la
condicion. En base a esta estimacion, sql server puede escoger un plan de
ejecucion diferente, el cual puede ofrecer peor rendimineto que el que se
escoje cuando usamos parametros. Cuando digo parametros, me refiero a los
parametros que pasamos a los procediminetos almacenados o cuando usamos
sp_executesql.

Veamos un ejemplo:

declare @numero integer
declare @sql nvarchar(4000)

set @numero=5
set @sql = N'select * from Tabla where numero = @numero'

exec sp_executesql @sql, N'@numero int', @numero
go

En este caso usamos parametros y no la variable de forma directa.

Cuando usamos:

select * from Tabla where numero = 5

SQL Server tratara de parametrizar esa sentencia para que si se ejecuta otra
sentencia parecida, pero donde solo cambia el valor de la constante, SQL
Server pueda usar el mismo plan de ejecucion. Si revisas el cache de
procedimientos (puedes usar syscacheobjects en 2000 y
sys._dm_exec_cached_plans en 2005), veras que la sentencia aparece como:

select * from Tabla where numero = @1

Donde @1 es el parametro creado por SQL Server.

Aca te paso un par de links, pero creo vas a tener que leer los articulos en
otra oportunidad porque algo pasa con el servidor de Miguel.

http://www.configuracionesintegrale...asp?tipo=*


- Estadísticas en SQL Server I
- Estadísticas en SQL Server II
- SQL y la autoparametrización


AMB


"Hiram Rogelio Santillán Navarro" wrote:

Por que al momento de usar este select
declare @numero integer
set @numero=5

select * from Tabla where numero = @numero

tarda mas que hacer esto

select * from Tabla where numero = 5

esto por dar un ejemplo.

Por que la situacion real engloba mas uniones
de tablas pero la idea es la anterior.



email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida