Size: a a a

2021 December 09

x

xtender in Oracle RU
источник

x

xtender in Oracle RU
Можете тут отвечать
источник

MO

Max Olsson in Oracle RU
Недавно узнал, что в Постгресе при использовании конструкции
select *
from table
where x = ?
order by y
offset 1000
limit 10
Даже при наличии индекса на (x,y) база считает 1010 строк, а не 10.
А как в Оракле с этим? 🤔
источник

Z

ZhekaPPP in Oracle RU
а что Вы понимаете под "считает" ? и какой смысл в order by если выбираются строки с одинаковым значением field?
источник

DG

Dmitry Grigorjev in Oracle RU
я думал во всех базах так. не отсчитав 1000, нельзя понять что отдать нужно с 1000й по 1010ю
источник

MO

Max Olsson in Oracle RU
Поменял запрос, чтобы было два поля.
источник

MO

Max Olsson in Oracle RU
Мне казалось, что у базы есть эффективный способ скипнуть первые N записей в индексе, т.к. там данные хранятся в отсортированном порядке
источник

MO

Max Olsson in Oracle RU
Запрос читает данные в том же порядке, что и в индексе
источник

Z

ZhekaPPP in Oracle RU
это если у вас индекс по (x,y)
источник

IG

Ildar Garaev in Oracle RU
Explain можете показать?
источник

KL

Kirill Leontev in Oracle RU
где-то была хорошая статья про то, как правильно делать пагинацию. не могу найти...
источник

IG

Ildar Garaev in Oracle RU
я на хабре видел такую статью. но к сожалению все девелоперы делают пагинацию через одно место. всякие rownum
источник

MO

Max Olsson in Oracle RU
Да там ничего интересного, offset 0 limit 1010 и offset 1000 limit 10 показывает одинаковое количество считанных buffers
источник

DG

Dmitry Grigorjev in Oracle RU
они по моему при таблице по умолчанию (heap organized) хранятся не по порядку. сканировать индекс или читать записи не принципиально думаю, в любом случае нужно "просмотреть" 1000 чтобы понять что следующую 1001ю нужно извлечь
источник

IG

Ildar Garaev in Oracle RU
но хотелось бы доказательства
источник

DS

Dmitriy Sergeevich in Oracle RU
Всем привет.
Возможны ли какие то ситуации  или баг при котором возможен двойной вызов процедуры т.е. ее вызвали один раз, но фактически она выполнилась два раза.
RAC - 12.1
источник

x

xtender in Oracle RU
Смотря как и откуда вызывали
источник

R

RAEman in Oracle RU
Если найдете сообщите пожалуйста. У нас вендор так сделал where rw between ((:pPageNo-1)*:pRowN+1) and ((:pPageNo)*:pRowN)
Правда еще вендор делает через TASKID. Типа сначала строит динамический sql, инсертит столбец идентификатора результата запроса и TASKID в LISTIDs. что чуточку быстрее чем leftjoin
источник

x

xtender in Oracle RU
Правильная - это использование двусторонних курсоров
источник

x

xtender in Oracle RU
Хотя в большинстве случаев даже обычного курсора хватит
источник