Mysql-запрос с пользовательской функцией - почему функция была вызвана дважды? - PullRequest
0 голосов
/ 30 августа 2010

У меня есть отношение 1: 1 между таблицами Entity и Contact (что соответствует наследованию объекта). fn_match (id) - это UDF, который возвращает логическое значение и возвращает true, если запись соответствует некоторым специальным критериям (дополнительные запросы внутри функции). Это запрос:

select *
from Entity a
inner join Contact b on a.id = b.id
where fn_match(a.i)

Работало нормально, но соединение резко портит производительность. Я добавил ведение журнала и обнаружил, что fn_match вызывался дважды для каждой записи в Entity с fn_match (id) = true. Я мог бы исправить это, добавив детерминистику к заголовку функции, но раньше думал, что каждая функция / хранимая процедура, обращающаяся к данным таблиц, недетерминирована.

Как правильно решить эту проблему?

1 Ответ

0 голосов
/ 30 августа 2010

Вы можете использовать временную таблицу для хранения результатов FROM Entity WHERE fn_match(i) - но это, вероятно, не улучшит производительность.Если это портит производительность, когда fn_match вызывается дважды, кажется, что производительность не была бы такой уж высокой, если бы она вызывалась только один раз для каждого элемента в Entity - так что, вероятно, лучше вообще переосмыслить функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...