что надо сделать: запрос изменить или в таблице что то?
Для начала неплохо бы теорию без данных изучить. Смотрите поля, по которым идёт сравнение. Если поля являются primary key, то они уже проиндексированы, если нет, то индексы нужно расставить вручную. Не ручаюсь за достоверность, но чаще всего поля id являются PK, не знаю как у вас. В одной таблице id для join может быть pk, в другой таблице нет. Думаю, что
r.val точно не pk и не имеет индексов. Посмотрите какие индексы есть вообще.
SELECT DISTINCT
TABLE_NAME,
INDEX_NAME
FROM INFORMATION_SCHEMA.STATISTICS
WHERE TABLE_SCHEMA = 'имя базы';