У меня есть запрос, который выглядит как этотMySql же расчет в выбрать и где
SELECT
col1,
col2
FROM
table1 t1
INNER JOIN table2 t2
ON t1.col = t2.col
WHERE expensive_func() < 10
Это работает довольно быстро @ 0.110 секунд. Но если я хочу также показать результат expensive_func()
так изменить запрос
SELECT
col1,
col2,
expensive_func() as col3
FROM
table1 t1
INNER JOIN table2 t2
ON t1.col = t2.col
WHERE expensive_func() < 10
Это работает, но время запроса теперь ~ 0,550
использованием объяснить на возвращает оба запрос, в точности то же самое (подтверждено дифф)
Есть ли способ использовать дорогой func?
Я предполагаю, что он медленнее, потому что он должен хранить результат дорогого func? как его более чем в два раза медленнее (то, что я ожидал бы быть максимум)
EDIT:
Только в случае, если версия 5.5.37-0ubuntu0.12.04.1-журнал, что я использую.
Edit2:
Удаление expensive_func()
из WHERE не кажется, делают различие во втором запросе в терминах времени, она возвращает несколько строк, но в то же количество времени.
Edit3:
По какой-то причине, используя MySQL CREATE FUNCTION замедляет его, принимая код из функции и положить его в запросе делает его гораздо быстрее.
Что делает 'дорогой_func()' для? Попробуйте создать простой UDF, например, вернуть константу, а затем снова проверить. –
Расчет расстояния – exussum