Machetes Varios

apuntes varios erp cwa logic ( ahora SoftLand Logic ) – sql y veremos que otra cosa

Generando un Millón de registros


Fuente: “Generando un millón de registros en menos de un segundo”

http://sqltips.wordpress.com

La forma “natural” para generar 1M de números sería

With Base As
(
Select 1 as n
Union All
Select n+1 From Base Where n <1000000
)
select n from base
OPTION (MaxRecursion 0)

 

El método optimizado genera una primera tabla con la raiz cuadrada de los números a generar ( Base ), luego se aplica un cross join sobre si misma(tabla Expand ), que luego se numera con la tabla Nums ( usando la función Row_Number() )


Declare @p_NumberOfRows Bigint
Select @p_NumberOfRows=1000000;

With Base As
(
Select 1 as n
Union All
Select n+1 From Base Where n < Ceiling(SQRT(@p_NumberOfRows))
),
Expand As
(
Select 1 as C
From Base as B1, Base as B2
),
Nums As
(
Select Row_Number() OVER(ORDER BY C) As n
From Expand
)
Select n from Nums Where n<=@p_NumberOfRows

OPTION (MaxRecursion 0);

 

abril 12, 2012 - Posted by | SQL Server, Transact SQL

Aún no hay comentarios.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: