Si puedes crear un procedimiento que te devuelva la lista de números ya no hay problemas.
Lo he probado en una base con 23.000 registros y ha tardado 31ms
La tabla tiene un índice único por el campo ID.
Código SQL
[-]
create procedure dame_rango (
ini integer,
fin integer)
returns (
n integer)
as
begin
n = ini;
while (n <= fin) do
begin
suspend;
n = n + 1;
end
end
Código SQL
[-]
WITH RECURSIVE N
AS (SELECT N
FROM DAME_RANGO((SELECT MIN(ID)
FROM ARTICULOS),
(SELECT MAX(ID)
FROM ARTICULOS)))
SELECT N.N
FROM N
WHERE
NOT EXISTS(SELECT ID
FROM ARTICULOS
WHERE
ID = N.N)