|
Выбрать определенное кол-во записей рекурсией
|
|||
---|---|---|---|
#18+
Всем доброго дня, имеется запрос, с лимитом в 10 записей. БД большая, поэтому по условию выбирается огромное кол-во записей, а затем обрубается до 10. Хочется переписать запрос рекурсивно, чтобы как только нашлось 10 подходящих записей запрос останавливался. Прошу помощи, пример запроса прикладываю select a, b, c, d from table t WHERE ( (a < t.f OR a IS NULL) AND (b < (current_timestamp - interval '1 seconds')) and (c IS NULL OR coalesce(c, 0) < t.q) and (d IS NULL OR coalesce(d, 0) < t.m) and (t.h = 11) ORDER BY t.m ASC NULLS FIRST, t.q DESC limit 10 ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 18:21 |
|
Выбрать определенное кол-во записей рекурсией
|
|||
---|---|---|---|
#18+
workhardplay Всем доброго дня, имеется запрос, с лимитом в 10 записей. БД большая, поэтому по условию выбирается огромное кол-во записей, а затем обрубается до 10. Хочется переписать запрос рекурсивно, чтобы как только нашлось 10 подходящих записей запрос останавливался. Прошу помощи, пример запроса прикладываю select a, b, c, d from table t WHERE ( (a < t.f OR a IS NULL) AND (b < (current_timestamp - interval '1 seconds')) and (c IS NULL OR coalesce(c, 0) < t.q) and (d IS NULL OR coalesce(d, 0) < t.m) and (t.h = 11) ORDER BY t.m ASC NULLS FIRST, t.q DESC limit 10 А с чего вы считаете что рекурсивная реализация вам как то поможет или сделает быстрее? Вы бы план показали сначала с результатами выполнения что ли... А заодно результаты select count(*) from table; и select count(*) from table where (все эти ваши странные условия); видя вот такой вот запрос я бы под него попробовал бы индекс сделать правильный для начала. -- Maxim Boguk лучшая поддержка PostgreSQL: dataegret.ru ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2020, 22:29 |
|
Выбрать определенное кол-во записей рекурсией
|
|||
---|---|---|---|
#18+
Для рекурсии используют CTE Только надо понимать, что рекурсия сильно много потребляет ресурсов в любых языках. Ну и реально лучше начать с изучения плана запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2020, 10:05 |
|
|
start [/forum/topic.php?fid=53&tid=1994421]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
160ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
40ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 255ms |
0 / 0 |