Last active
December 9, 2020 22:17
-
-
Save jobbish-sql/3792fe243240a4d760348e75ebddf4c2 to your computer and use it in GitHub Desktop.
Solution for "fastest number series generator" article on sqlperformance.com
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
DROP TABLE IF EXISTS dbo.GetNumsObbishTable; | |
CREATE TABLE dbo.GetNumsObbishTable (ID BIGINT NOT NULL, INDEX CCI CLUSTERED COLUMNSTORE); | |
GO | |
SET NOCOUNT ON; | |
DECLARE @c INT = 0; | |
WHILE @c < 128 | |
BEGIN | |
INSERT INTO dbo.GetNumsObbishTable | |
SELECT TOP (1048576) @c * 1048576 - 1 + ROW_NUMBER() OVER(ORDER BY (SELECT NULL)) | |
FROM master..spt_values t1 | |
CROSS JOIN master..spt_values t2 | |
OPTION (MAXDOP 1); | |
SET @c = @c + 1; | |
END; | |
GO | |
CREATE OR ALTER FUNCTION dbo.GetNumsObbish(@low AS BIGINT, @high AS BIGINT) RETURNS TABLE | |
AS | |
RETURN | |
SELECT @low + ID AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE ID <= @high - @low | |
UNION ALL | |
SELECT @low + ID + CAST(134217728 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(134217728 AS BIGINT) | |
AND ID <= @high - @low - CAST(134217728 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(268435456 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(268435456 AS BIGINT) | |
AND ID <= @high - @low - CAST(268435456 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(402653184 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(402653184 AS BIGINT) | |
AND ID <= @high - @low - CAST(402653184 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(536870912 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(536870912 AS BIGINT) | |
AND ID <= @high - @low - CAST(536870912 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(671088640 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(671088640 AS BIGINT) | |
AND ID <= @high - @low - CAST(671088640 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(805306368 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(805306368 AS BIGINT) | |
AND ID <= @high - @low - CAST(805306368 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(939524096 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(939524096 AS BIGINT) | |
AND ID <= @high - @low - CAST(939524096 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1073741824 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1073741824 AS BIGINT) | |
AND ID <= @high - @low - CAST(1073741824 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1207959552 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1207959552 AS BIGINT) | |
AND ID <= @high - @low - CAST(1207959552 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1342177280 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1342177280 AS BIGINT) | |
AND ID <= @high - @low - CAST(1342177280 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1476395008 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1476395008 AS BIGINT) | |
AND ID <= @high - @low - CAST(1476395008 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1610612736 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1610612736 AS BIGINT) | |
AND ID <= @high - @low - CAST(1610612736 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1744830464 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1744830464 AS BIGINT) | |
AND ID <= @high - @low - CAST(1744830464 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(1879048192 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(1879048192 AS BIGINT) | |
AND ID <= @high - @low - CAST(1879048192 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2013265920 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2013265920 AS BIGINT) | |
AND ID <= @high - @low - CAST(2013265920 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2147483648 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2147483648 AS BIGINT) | |
AND ID <= @high - @low - CAST(2147483648 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2281701376 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2281701376 AS BIGINT) | |
AND ID <= @high - @low - CAST(2281701376 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2415919104 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2415919104 AS BIGINT) | |
AND ID <= @high - @low - CAST(2415919104 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2550136832 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2550136832 AS BIGINT) | |
AND ID <= @high - @low - CAST(2550136832 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2684354560 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2684354560 AS BIGINT) | |
AND ID <= @high - @low - CAST(2684354560 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2818572288 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2818572288 AS BIGINT) | |
AND ID <= @high - @low - CAST(2818572288 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(2952790016 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(2952790016 AS BIGINT) | |
AND ID <= @high - @low - CAST(2952790016 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3087007744 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3087007744 AS BIGINT) | |
AND ID <= @high - @low - CAST(3087007744 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3221225472 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3221225472 AS BIGINT) | |
AND ID <= @high - @low - CAST(3221225472 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3355443200 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3355443200 AS BIGINT) | |
AND ID <= @high - @low - CAST(3355443200 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3489660928 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3489660928 AS BIGINT) | |
AND ID <= @high - @low - CAST(3489660928 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3623878656 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3623878656 AS BIGINT) | |
AND ID <= @high - @low - CAST(3623878656 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3758096384 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3758096384 AS BIGINT) | |
AND ID <= @high - @low - CAST(3758096384 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(3892314112 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(3892314112 AS BIGINT) | |
AND ID <= @high - @low - CAST(3892314112 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(4026531840 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(4026531840 AS BIGINT) | |
AND ID <= @high - @low - CAST(4026531840 AS BIGINT) | |
UNION ALL | |
SELECT @low + ID + CAST(4160749568 AS BIGINT) AS n | |
FROM dbo.GetNumsObbishTable | |
WHERE @high - @low + 1 > CAST(4160749568 AS BIGINT) | |
AND ID <= @high - @low - CAST(4160749568 AS BIGINT); | |
GO |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment