Pull to refresh

Comments 5

Он когда-то был в MySQL, но потом его героически выпилили.
Не то чтобы когда-то… Выпилили в версии 8.0.3. Имхо, еще не один год пройдет прежде, чем 8-ая ветка достигнет хотя бы половины от количества инсталляций.

И, на мой взгляд, зря. При умеренном употреблении вполне полезная вещь была.
Хотя при неумеренном больше вредила, это да.
Кейс 1. Хранилище ретейлера

А что мешало завернуть в запросе вызов функции в (SELECT… FROM DUAL)?
И что бы это вам дало?
Функция вызывается с передачей в нее значений из столбцов таблицы — соответственно вызов функции на каждую выбираемую строку пойдет(как и написано в абзаце). Отсюда мораль: дети, не используйте функции ни в where clause, ни в селект списке, это может быть больно.

А автору — респект и уважуха за такой отличный и подробный разбор подводных камней.
Результат бы закешировался и для одинаковых значений выполнялся бы очень быстро, в селекте, как правило, функции не вызывают никаких проблем, в where надо быть аккуратнее, т.к. может измениться план запроса и вызовов функции существенно увеличится, хотя если завернуть в (SELECT… FROM DUAL), то тоже проблем не будет

Вот статейка
www.oratechinfo.co.uk/scalar_subqueries.html
Ну ничего нового тут нет написано, чего бы я не знал.
Если вариантов значений у столбцов(которые передаются в функцию) таблицы много, то «кеш» будет только на каждый уникальный набор входных аргументов.
И причем тоже не всегда это будет работать(там даже написано об этом — есть лимит применения «кеша» по числу строк в датасете)
Sign up to leave a comment.