|
|
|
Подскажите с алгоритмом
|
|||
|---|---|---|---|
|
#18+
- Есть некий запрос, который возвращает данные из БД по заданным параметрам, например по дате "с" и "по". - Возвращаемые этим запросом столбцы являются аргументами для функции данные в этих столбцах не просто поля в базе, а результат какого то вычисления запроса. - Функция рассчитывает данные внутри и возвращает строку с результатом для каждой строки главного запроса. - Проблема в том, что функция тоже обращается к базе на каждую строку главного запроса и получается так, что чем больше строк вернет главный запрос, тем дольше он будет выполняться. - Как можно реализовать функцию, чтобы она читала данные из базы для расчета данных главного запроса, не для каждой строки, а например один раз читала данные из базы сохраняла бы куда то, а после проводились бы вычисления? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 09:13 |
|
||
|
Подскажите с алгоритмом
|
|||
|---|---|---|---|
|
#18+
global temporary table ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 09:18 |
|
||
|
Подскажите с алгоритмом
|
|||
|---|---|---|---|
|
#18+
Большое спасибо, запрос стал отрабатывать в разы быстрее. Реализовал следующим образом: - Создал две global temporary tables on commit preserve rows - Процедуру, которая заполняет эти временные таблицы, данными из старой функции - Переделал старую функцию, теперь она выбирает данные из временных таблиц - Функцию pipelined (после begin выполняется процедура по наполнению временных таблиц), которая реализует главный запрос и в ней же подставляется функция с выборкой из временных таблиц ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 10.02.2017, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=52&fpage=176&tid=1886465]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
89ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
31ms |
get tp. blocked users: |
1ms |
| others: | 238ms |
| total: | 399ms |

| 0 / 0 |
