важна по большому счету), в таблице в данных есть "дырки" от удаленных строк
то есть id записей могут быть 1, 2, 8, 9, 43 для примера
нужно найти начало и конец интервалов по 10млн записей (ну или просто конец интервала)
то есть интервал из 10млн начинается допустим с 1 записи , а заканчивается на записи с id 117000001 (но в этом интервале ровно 10млн реальных записей)
сейчас есть вот такое решение (непричесанное)
select * from
(select row_number() OVER (ORDER BY ID) as number ,id FROM table ) as t
where number%10000000=0
но может есть какой-то вариант еще лучше и быстрее ?
подобная точность не обязательна, погрешность ширины интервала допустима в 0,5млн записей, но число отсутствующих записей абсолютно не предсказуемо, может быть что все записи на месте
запрос готовится для выполнения на любой таблице, поэтому схема тут не важна ( за исключением того что есть автоинкрементный id в виде первичного ключа)
select id-lag(id), id over (order by id) from table order by 1 limit 1 ?
благодарю за функцию lag, схоронил.. но нет, думаю не подойдет (но я запустил,чтобы глазами увидеть), lag даст предыдущее значение для переданного мне же нужно работать с интервалом
Быстрее? А план у вашего запроса какой? Если там 1 скан, то быстрее уже нельзя
1 Index Only Scan да, в общем случае... несколько на партиционированных таблицах... но так то да... логично, спасибо за аргумент )
Обсуждают сегодня