Обсуждение: Стоимость запроса в EXPLAIN с LIMIT и OFFSET

Поиск
Список
Период
Сортировка

Стоимость запроса в EXPLAIN с LIMIT и OFFSET

От
"Dmitry E. Oboukhov"
Дата:
SELECT
    *
FROM
    table
ORDER BY
    column
LIMIT
    10
OFFSET
    100

стоимость запроса растет вместе с ростом OFFSET.


есть необходимость написать некую программу которая обойдет всю
большую таблицу именно в порядке сортировки по конкретному столбику и
пересчитает один из столбиков и сделает апдейт.

индекс по column есть.

если в начале работы основные затраты были на собственно расчеты. то
ближе к середине в основном висит в БД тупо делая этот SELECT
десятками секунд.

Вопрос. как можно ускорить данный запрос?
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Вложения

Re: Стоимость запроса в EXPLAIN с LIMIT и OFFSET

От
"Alexander M. Pravkin"
Дата:
Если проходиться по всей таблице, то нет смысла делать limit/offset
кроме как для экономии памяти. Тут может помочь cursor:

DECLARE my_cursor CURSOR FOR SELECT ...
FETCH NEXT 10 FROM my_cursor;
FETCH ...
...
CLOSE my_cursor;


On Mon, 2011-11-28 at 01:00 +0400, Dmitry E. Oboukhov wrote:
> SELECT
>     *
> FROM
>     table
> ORDER BY
>     column
> LIMIT
>     10
> OFFSET
>     100
>
> стоимость запроса растет вместе с ростом OFFSET.
>
>
> есть необходимость написать некую программу которая обойдет всю
> большую таблицу именно в порядке сортировки по конкретному столбику и
> пересчитает один из столбиков и сделает апдейт.
>
> индекс по column есть.
>
> если в начале работы основные затраты были на собственно расчеты. то
> ближе к середине в основном висит в БД тупо делая этот SELECT
> десятками секунд.
>
> Вопрос. как можно ускорить данный запрос?
> --
>
> . ''`.                               Dmitry E. Oboukhov
> : :’  :   email: unera@debian.org jabber://UNera@uvw.ru
> `. `~’              GPGKey: 1024D / F8E26537 2006-11-21
>   `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537



--
Alexander M. Pravkin

Re: Стоимость запроса в EXPLAIN с LIMIT и OFFSET

От
"Dmitry E. Oboukhov"
Дата:
> Если проходиться по всей таблице, то нет смысла делать limit/offset
> кроме как для экономии памяти. Тут может помочь cursor:

> DECLARE my_cursor CURSOR FOR SELECT ...
> FETCH NEXT 10 FROM my_cursor;
> FETCH ...
> ...
> CLOSE my_cursor;

Курсоры тут к сожалению не подойдут по задаче :(
программа обходить таблицу может несколько месяцев. соответственно она
отконнекчивается и приконнекчивается.
--

. ''`.                               Dmitry E. Oboukhov
: :’  :   email: unera@debian.org jabber://UNera@uvw.ru
`. `~’              GPGKey: 1024D / F8E26537 2006-11-21
  `- 1B23 D4F8 8EC0 D902 0555  E438 AB8C 00CF F8E2 6537

Вложения