Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Как определить пропущенные записи  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
Есть большая таблица (500 млн записей)
create table [Data]
(
    [id] int identity(1,1)
   ,[pid] int not null //идентификатор изображения
   ,[field1] int not null
   ,[field2] varchar(100) not null
   ,constraint [PK_Data] primary key clustered ([uid],[field1],[field2])
)

В таблице должна присутствовать информация обо всех [pid] от 1 до 500 000 000.
Как оптимально определить отсутствующие записи?
10 май 17, 10:19    [20467955]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
iap
Member

Откуда: Москва
Сообщений: 46977
=Сергей=,

А где там uid?
10 май 17, 10:22    [20467963]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
aleksrov
Member

Откуда:
Сообщений: 948
=Сергей=,

Какая версия сервера?
Если 2012 самый простой способ через LEAD, т.е. классические gaps.
with c as
(
select pid as cur, LEAD(pid) over (order by pid) as nxt
from data
)
select cur+1 as rangestart, nxt - 1 as rangeend
from c
where nxt-cur > 1
10 май 17, 10:28    [20467985]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
aleks2
Guest
=Сергей=
Есть большая таблица (500 млн записей)
create table [Data]
(
    [id] int identity(1,1)
   ,[pid] int not null //идентификатор изображения
   ,[field1] int not null
   ,[field2] varchar(100) not null
   ,constraint [PK_Data] primary key clustered ([uid],[field1],[field2])
)

В таблице должна присутствовать информация обо всех [pid] от 1 до 500 000 000.
Как оптимально определить отсутствующие записи?


Ты не поверишь!

Табличка с числами от 1 до 500 000 000.
10 май 17, 10:33    [20468004]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
aleks2
=Сергей=
В таблице должна присутствовать информация обо всех [pid] от 1 до 500 000 000.
Как оптимально определить отсутствующие записи?

Ты не поверишь!
Табличка с числами от 1 до 500 000 000.


Left join на что-то типа

select top 500000 row_number() over (order by (select 1)) 
from 
	sys.columns a,
	sys.columns b,
	sys.columns c,
	sys.columns d,
	sys.columns e,
	.............,
10 май 17, 10:37    [20468024]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
aleks2
Guest
Шыфл
aleks2
пропущено...

Ты не поверишь!
Табличка с числами от 1 до 500 000 000.


Left join на что-то типа

select top 500000 row_number() over (order by (select 1)) 
from 
	sys.columns a,
	sys.columns b,
	sys.columns c,
	sys.columns d,
	sys.columns e,
	.............,


Ога! 500 000 000.
Фантазер.
10 май 17, 10:41    [20468048]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
=Сергей=
Member

Откуда:
Сообщений: 329
aleksrov
Какая версия сервера?

2008

aleks2
Табличка с числами от 1 до 500 000 000

Я думал, есть более эффективное решение...
Я правильно понял? Сгенерить таблицу с нужным диапазоном [pid] и сравнивать их, например через except.
10 май 17, 10:45    [20468063]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
aleks2
Guest
=Сергей=
aleksrov
Какая версия сервера?

2008

aleks2
Табличка с числами от 1 до 500 000 000

Я думал, есть более эффективное решение...
Я правильно понял? Сгенерить таблицу с нужным диапазоном [pid] и сравнивать их, например через except.


Огласите критерии "эффективности"!
10 май 17, 10:52    [20468090]     Ответить | Цитировать Сообщить модератору
 Re: Как определить пропущенные записи  [new]
Шыфл
Member

Откуда: Прага
Сообщений: 776
aleks2
Шыфл
Left join на что-то типа
select top 500000 row_number() over (order by (select 1)) 
from 
	.............

Ога! 500 000 000.
Фантазер.

Согласен, не шибко умно.
select a.id from [data] a
left join [data] b
on a.pid=b.pid+1
where b.Id is null

Так можно найти начала дырок
10 май 17, 11:03    [20468142]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить