Insert con campo autonumerico

27/05/2009 - 05:07 por Penta | Informe spam
Estimados.
Utilizo SS2000
Estabamos realizando una prueba, con una tabla llamada TEST
ID autonumerico (con incremento de 1)
Campo1 Int
Campo2 Int
Total Int (Campos Calculado de Campo1+Campo2)

Aca 2 consultas:
1.- Realizamos un bucle que llenara la tabla con 1 Millon de
registros.
Insert Into TEST (1000,500)
Por algun motivo al terminar el ultimo valor de Id es de 2135000
claramente se salto muchisimos ID, no veo ninguna relacion en cuanto a
cuando y donde salto, pues de 197.000 salto a 350.000 y otros saltos
raros.
Paraleo a esto en otra ventana de Qry Analyzer ibamos haciendo
Select * from TEST
Cual sería el motivo de dichos saltos??


2.- Bueno el ID me da lo mismo para a idea original ya que era para
comprobar el tiempo de ejecucion de la misma consulta de la tabla TEST
con un campo calculado (Total) y un campo Total que no sea calculado
(es decir que tenga el update de campo1+campo2) esto lo hicimos con
TEST2 y el campo TOTAL lo indexamos.

Select * from TEST (sin indices)
Where total > 500

Select * from TEST2
Where total > 500

2.1.- Se demoran lo mismo.
2.2.- Al revisar el plan de ejecucion de la consulta de TEST2 no usa
el indice creado para dicho efecto mas bien usa la PK del Id

Pregunta aparte:
En una consulta acá mismo me dijeron que el tener un campo con los
valores ya calculados (TEST2)me servia en caso de querer filtrar por
dicho campo ya que lo podia indexar, no pude comprobar eso, ademas
entendi con dicha argumentacion que un campo calculado NO lo podia
indexar pero SI pude hacerlo (TEST)

Atte.
PENTA.
 

Leer las respuestas

#1 Carlos Sacristan
27/05/2009 - 08:33 | Informe spam
Por partes:

No sé por qué te puede estar pasando esos saltos, yo crearía la tabla de
nuevo y ejecutaría el proceso otra vez con una traza de profiler por si se
estuviera haciendo algo mal. También habría que ver cómo estáis ejecutando
dicho proceso.

En cuanto a lo de que el plan y el tiempo de ejecución sea el mismo, si
insertas los mismos valores, es normal que SQL Server opte por recorrerse la
tabla en vez de usar el índice. Prueba a meter valores aleatorios, o con una
distribución que te permita comprobar la diferencia entre usar el índice o
no hacerlo.

Creo recordar que fui yo el que te contestó lo de usar campos calculados,
pero en ningún momento te dije que no se pudiera indexar, más bien todo lo
contrario.

Un saludo
-
www.navento.com
Servicios de Localización GPS

http://blogs.solidq.com/ES/ElRincon...fault.aspx

"Penta" escribió en el mensaje
news:
Estimados.
Utilizo SS2000
Estabamos realizando una prueba, con una tabla llamada TEST
ID autonumerico (con incremento de 1)
Campo1 Int
Campo2 Int
Total Int (Campos Calculado de Campo1+Campo2)

Aca 2 consultas:
1.- Realizamos un bucle que llenara la tabla con 1 Millon de
registros.
Insert Into TEST (1000,500)
Por algun motivo al terminar el ultimo valor de Id es de 2135000
claramente se salto muchisimos ID, no veo ninguna relacion en cuanto a
cuando y donde salto, pues de 197.000 salto a 350.000 y otros saltos
raros.
Paraleo a esto en otra ventana de Qry Analyzer ibamos haciendo
Select * from TEST
Cual sería el motivo de dichos saltos??


2.- Bueno el ID me da lo mismo para a idea original ya que era para
comprobar el tiempo de ejecucion de la misma consulta de la tabla TEST
con un campo calculado (Total) y un campo Total que no sea calculado
(es decir que tenga el update de campo1+campo2) esto lo hicimos con
TEST2 y el campo TOTAL lo indexamos.

Select * from TEST (sin indices)
Where total > 500

Select * from TEST2
Where total > 500

2.1.- Se demoran lo mismo.
2.2.- Al revisar el plan de ejecucion de la consulta de TEST2 no usa
el indice creado para dicho efecto mas bien usa la PK del Id

Pregunta aparte:
En una consulta acá mismo me dijeron que el tener un campo con los
valores ya calculados (TEST2)me servia en caso de querer filtrar por
dicho campo ya que lo podia indexar, no pude comprobar eso, ademas
entendi con dicha argumentacion que un campo calculado NO lo podia
indexar pero SI pude hacerlo (TEST)

Atte.
PENTA.

Preguntas similares