У меня есть отношение 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. Я мог бы исправить это, добавив детерминистику к заголовку функции, но раньше думал, что каждая функция / хранимая процедура, обращающаяся к данным таблиц, недетерминирована.
Как правильно решить эту проблему?