Оптимизируется ли многократный вызов функции в MySQL запросе?

В этом запросе определенная пользователем функция myfun() будет вычисляться по три раза для каждого значения поля field или будет какая-то оптимизация? Что можно сделать для оптимизации такого запроса?
SELECT COUNT(*) FROM mytable 
WHERE myfun( field )='str1' OR myfun( field )='str2' OR myfun( field )='str3';
  • Вопрос задан
  • 111 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега MySQL
Fullstack programmer, DBA, медленно, дорого
SELECT COUNT(*) FROM mytable 
WHERE myfun( field ) IN ('str1', 'str2', 'str3');


но это все равно плохо. Лучше найти обратную функцию и использовать

SELECT COUNT(*) FROM mytable 
WHERE field IN (myrevfunc('str1'), myrevfunc('str2'), myrevfunc('str2'));
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
BojackHorseman
@BojackHorseman Куратор тега MySQL
...в творческом отпуске...
будет вычисляться. и все будет мимо индексов.

index over generated column
при некоторых ограничениях на имплементацию myfun()

если ее нельзя выразить через разрешенные операторы/литералы/вызовы функций, то приходится извращаться триггерами для расчета значений индексируемого поля.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы