Если вы уже используете аналитику (ROW_NUMBER() OVER ...
), то добавление еще одной аналитической функции к тому же разделению приведет к незначительным затратам на запрос.
С другой стороны, есть много других способов сделать нумерацию страниц, один из которых использует rownum
:
SELECT *
FROM (SELECT A.*, rownum rn
FROM (SELECT *
FROM your_table
ORDER BY col) A
WHERE rownum <= :Y)
WHERE rn >= :X
Этот метод будет лучше, если у вас есть соответствующий индекс в столбце заказа. В этом случае может быть более эффективно использовать два запроса (один для общего числа строк, один для результата).
Оба метода являются подходящими, но в целом, если вы хотите, чтобы количество строк и набор разбивались на страницы, использование аналитики более эффективно, поскольку вы запрашиваете строки только один раз.
Сегодня Rails хорошо работает с ActiveRecord; изменение ORM наверняка доставит вам некоторые проблемы. Rails 3.0 не будет зависеть от ORM, поэтому я ожидаю, что переключатель, подобный тому, который вы описываете, будет проще в будущем.
Если вы не жаждете понять Rails наизнанку, и у вас будет время исправить глюки, которые ваше приложение откроется, придерживайтесь ActiveRecord.
Могу ли я встретить еще много примеров такой функциональности, которая потребует корректировок в моем приложении?
Это зависит от кода, который вы уже написали. По поводу того, что вы сообщили в своем вопросе, я бы сказал да .
Выполним ли этот проект или он, вероятно, потребует большого количества сложных хакерских атак?
Это выполнимо и потребует множества сложных хакерских действий. Обратной стороной является то, что большая часть того, что вы узнаете из этого хакерского метода, скорее всего, будет устаревшей в Rails 3.0.