В тот момент, когда я вижу запрос и цикл, я думаю, что у вас есть проблема с задержкой: вы запрашиваете набор значений, а затем перебираете набор, чтобы сделать что-то еще. Это ОЧЕНЬ много времени ожидания, если это означает, что для каждой строки в наборе выполняется обратное подключение к базе данных по сети.
Было бы лучше, если бы вы могли сделать это в одном запросе с использованием ОБНОВЛЕНИЯ и дополнительного выбора ИЛИ, если бы вы могли пакетировать эти запросы и выполнять их все в одном цикле.
Вы получите дополнительную скорость, если будете использовать индексы с умом. Каждый столбец в предложении WHERE должен иметь индекс. Каждый внешний ключ должен иметь индекс.
Я бы запустил EXPLAIN PLAN для ваших запросов и посмотрю, происходит ли TABLE SCAN. Если есть, вы должны правильно индексировать.
Интересно, придет ли вам на помощь правильно спроектированный JOIN?
240 000 строк в одной таблице и 77 000 в другой - не , что большой размер базы данных.