Хранимая процедура может быть немного сложна для реализации, но она того стоит.
Сначала вырежьте из вашей большой таблицы данные, с которыми вы будете сопоставлять
create temporary table tmp_temp_bulk_tesing
select * from temp_bulk_tesing where creatition_date between '2019-10-10 22:22:18'and
'2019-10-13 22:22:18';
Добавьте индекс всделайте вещи еще быстрее
alter table tmp_temp_bulk_tesing add INDEX ttbt (id);
Затем выполните объединение
select count(temp_bulk_tesing.id) from tmp_temp_bulk_tesing ttbt
inner join org_account oa
on (ttbt.request_account=oa.id or ttbt.responce_account=oa.id)
Объединение ОЧЕНЬ тяжело для базы данных, и, выделив правильные данные, вы можете переходить от часов к секундам или даже дробисекунды, чтобы его обработать.
Еще один прием, который может помочь, - вместо использования
and temp_bulk_tesing.creatition_date >='2019-10-10 22:22:18'
and temp_bulk_tesing.creatition_date <= '2019-10-13 22:22:18'
- сначала отдельно получить максимальный и минимальный идентификаторы из базы данных и включить их взапрос.
select max(id), min(id) from temp_bulk_tesing where creatition_date between '2019-10-10 22:22:18' and '2019-10-13 22:22:18'
и затем используйте эти идентификаторы в запросе. index в int должен быть быстрее, чем index для datetime, а id должен быть в порядке, чтобы сделать его еще проще.
Это не так эффективно, как временные таблицы, но может быть достаточно для вас.