Очевидно, это очень сложная задача для функции.
Я рекомендую вам разделить его на более простые части.
Несмотря на это, вы не сможете избежать чтения целых таблиц для выполнения поиска, о котором вы упомянули (ищите СМИ в платежной ведомости работодателя). Решение состоит в том, чтобы проанализировать, какие из этих задач являются нестабильными, а какие нет.
Например, заработная плата работодателя может меняться раз в месяц. Затем запустите процесс поиска только один раз; это не обязательно быть функцией.
Другие, такие как фильтрация заработной платы выбранного работника, могут понадобиться по требованию, поэтому функционализируйте их.
Наконец, используйте пакеты profvis
и microbenchmark
для записи улучшений и документирования сложных процессов. Отделите один выстрел запущенных процессов от ядра; впоследствии его можно заменить другим языком, делегировать ИТ-команде или устареть из-за улучшенного дизайна базы данных или из-за более высокого качества данных.