Пейджинг огромных таблиц в DB2 - PullRequest
0 голосов
/ 21 марта 2010

У нас есть представление, что без ограничений вернет 90 миллионов строк и приложение для отчетов, которое должно отображать постраничные наборы данных этого представления.

Мы используем nhibernate и недавно заметили, что его механизм подкачки выглядит следующим образом:

select * from (select rownumber() over() as rownum, 
    this_.COL1 as COL1_20_0_, 
    this_.COL2 as COL2_20_0_ 
    FROM SomeSchema.SomeView this_ 
    WHERE this_.COL1  = 'SomeValue') as tempresult 
where rownum between 10 and 20

Запрос ставит сервер БД на колени. Я думаю, что происходит то, что вложенный запрос назначает номер строки каждой строке, удовлетворяющей предложению where, перед выбором подмножества (строки 10 - 20). Поскольку вложенный запрос будет возвращать много строк, механизм не очень эффективен. Я видел множество советов и приемов для эффективного выполнения этого на других платформах SQL, но я изо всех сил пытаюсь найти решение DB2. Фактически статья на собственном сайте IBM рекомендует подход, принятый nhibernate.

Есть ли лучший способ?

1 Ответ

1 голос
/ 24 марта 2010

К сожалению, насколько я знаю, это единственный подход.Однако я думаю, что сначала вам нужно определить время, затрачиваемое на компоненты запроса - используйте визуальное объяснение или инструменты мониторинга снимков / событий.

...