Мой друг и я недавно обсуждали это, поэтому мне было интересно, может ли кто-нибудь здесь знать ответ.
Как правило, для эмуляции синтаксиса LIMIT start_index,result_count
MySQL и функциональности LIMIT result_count OFFSET start_index
MySQL и PostgreSQL в Oracle мы используем:
SELECT P.* FROM
( SELECT COL1...COLN, ROW_NUMBER() OVER ID_COLUMN AS RN FROM MY_TABLE )
WHERE P.RN BETWEEN START_INDEX AND END_INDEX;
Вместо явной функции предела необходимо использовать это альтернативное средство.
(Если есть лучший способ, пожалуйста, дайте мне знать)
Один из нас утверждал, что это означает, что Oracle фактически извлекает записи END_INDEX, а затем возвращает только те записи, которые имеют значение rn больше START_INDEX. Это означает, что при поиске записей 123,432-123,442 Oracle получит 123,431 ненужных записей. Затем было высказано мнение, что из этого следует, что две упомянутые БД с открытым исходным кодом (MySQL и PgSQL) косвенно имеют возможность сократить это.
Аргумент счетчика состоит в том, что СУБД оптимизированы для обработки подзапросов, что означает, что синтаксис не обязательно подразумевает поведение. Кроме того, синтаксисы LIMIT, вероятно, являются просто синтаксическим сахаром, который действительно является оберткой вокруг того, что должно быть явно указано в Oracle.
Есть ли кто-нибудь, кто может определить, какая из них является правильной интерпретацией? Возможно, оба в некотором роде верны?