Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
Нужно вычислить функцию от поля и возвратить часть получившихся строк в зависимости от значения функции Код: plaintext 1. 2. Как-то так. Такой запрос, конечно, сработает. Проблема в том, что функция вычисляется дважды, если я правильно понимаю. Как сократить количество вычислений функции до одного? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 11:36 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoe Как сократить количество вычислений функции до одного? можно, конечно, два запроса сделать - select, потом delete where... Но тогда места много скушает промежуточная таблица. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 11:45 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoe crusoe Как сократить количество вычислений функции до одного? можно, конечно, два запроса сделать - select, потом delete where... Но тогда места много скушает промежуточная таблица. Во-первых, можно выполнить фильтрацию подзапроса: Код: plaintext 1. 2. 3. 4. 5. 6. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 12:57 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
Kruchinin Pahan crusoe можно, конечно, два запроса сделать - select, потом delete where... Но тогда места много скушает промежуточная таблица. Во-первых, можно выполнить фильтрацию подзапроса: Код: plaintext 1. 2. 3. 4. 5. 6. Фильтрация - та же самая временная таблица будет. Ну может чуть быстрее всё пройдёт. А вот IMMUTABLE и STABLE в CREATE FUNCTION - как раз то, что нужно! Большое спасибо! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 13:14 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoeФильтрация - та же самая временная таблица будет.зачем временная таблица для фильтрации ? это же не order by... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 13:57 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
Ёш crusoeФильтрация - та же самая временная таблица будет.зачем временная таблица для фильтрации ? это же не order by... Теоретически, конечно, временную таблицу всю сразу вычислять не нужно. Так что Вы правы наверняка. Меня смутил отрывок из справочника SELECT (FROM clause): sub-SELECT can appear in the FROM clause. This acts as though its output were created as a temporary table for the duration of this single SELECT command. Note that the sub-SELECT must be surrounded by parentheses, and an alias must be provided for it. Написано "так как будто создаётся временная таблица". Спасибо за коммент! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 07.07.2008, 14:13 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
Вариант 1(фантастический) Проанализируйте сначала саму функцию. Может быть можно сократить количество вычислений на основании x и некоторых допущений. Вариант 2(реалистический) - Добавить в таблицу поле FUNX и сохранять туда значение fun(x) в момент вставки записи или изменения значения x. Тогда выборка станет тривиальной и очень быстрой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 00:46 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoeIMMUTABLE и STABLE в CREATE FUNCTION - как раз то, что нужно!+1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 10:25 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBat crusoeIMMUTABLE и STABLE в CREATE FUNCTION - как раз то, что нужно!+1 Однако... Пытаюсь тестировать функцию при помощи запроса: Код: plaintext 1. 2. 3. 4. 5. независимо от того, как я определил эту функцию, IMMUTABLE или VOLATILE имею примерно одинаковое время (что-то около 310мс)! Похоже, что время вычисления всех необходимых значений функции, даже будучи удвоенным, много меньше времени вставки 10000 записей во временную таблицу. Интересно, как бы это протестировать получше? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 15:28 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
сравните время выполнения запросов Код: plaintext 1. 2. 3. 4. и Код: plaintext 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 15:41 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoeКак сократить количество вычислений функции до одного? Т.е. до нуля Вам не нужно, нужно до одного? Зачем вообще все эти извращения? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 16:29 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
LeXa NalBatсравните время выполнения запросов Значит, постгрескуль воспринимает мою функцию как VOLATILE независимо от того что я пишу в CREATE FUNCTION? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 16:51 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
MySQLCraft Т.е. до нуля Вам не нужно, нужно до одного? Зачем вообще все эти извращения? Чтобы два раза одно и тоже значение не вычислять. Если Вам всё равно, сколько требуется времени для ответа на запрос - 3 часа или 6 - то тогда конечно, не стоит заморачиваться с такими нюансами. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 16:53 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoeЧтобы два раза одно и тоже значение не вычислять. Ну и с теоретической точки зрения интересно. Нужно же знать как сервер работает?! Не скажешь ведь заказчикам: я, мол, своё дело сделал, а тормозит, потому что сервер такой! %-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 17:42 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
crusoe MySQLCraft Т.е. до нуля Вам не нужно, нужно до одного? Зачем вообще все эти извращения? Чтобы два раза одно и тоже значение не вычислять. Если Вам всё равно, сколько требуется времени для ответа на запрос - 3 часа или 6 - то тогда конечно, не стоит заморачиваться с такими нюансами. Ну и вычисляйте один раз во время INSERT/UPDATE. В чем проблема? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 17:54 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
MySQLCraft Ну и вычисляйте один раз во время INSERT/UPDATE. В чем проблема? 1. Теоретический интерес. 2. База будет заполняться путём импорта из файла. От 10000 строк/файл. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 18:04 |
|
||
|
Как избавиться от многократного вычисления функции в запросе?
|
|||
|---|---|---|---|
|
#18+
Давайте свернём дискуссию. Внятный ответ про IMMUTABLE найден здесь: http://www.postgresqlforums.com/forums/viewtopic.php?f=11&t=512&p=1916&hilit=volatility#p1916 Суть - IMMUTABLE говорит о том, что функция абсолютно детерминирована своими параметрами, но если она вызывается дважды в запросе, то и вычисляется дважды. Большое спасибо всем, кто ответил мне! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 08.07.2008, 18:13 |
|
||
|
|

start [/forum/topic.php?fid=53&msg=35416391&tid=2004228]: |
0ms |
get settings: |
7ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
46ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 218ms |
| total: | 384ms |

| 0 / 0 |
