Всем привет.
Есть такой запрос:
SELECT COUNT(DISTINCT t.subscriber_id) as counter
FROM `list_subscriber` `t`
LEFT JOIN `list_field_value` `fieldValues984` ON `fieldValues984`.`subscriber_id`=`t`.`subscriber_id`
LEFT JOIN `list_field_value` `fieldValues986` ON `fieldValues984`.`subscriber_id`=`t`.`subscriber_id`
WHERE
`t`.`list_id` = 60
AND `t`.`status` = 'confirmed'
AND `fieldValues984`.`field_id` = 984
AND `fieldValues984`.`value` LIKE '%2022%'
AND `fieldValues986`.`field_id` = 986
AND `fieldValues986`.`value` LIKE '%example.ru%'
Запрос формирует CMS MailWizz, написанная на yii1.
Размеры всей базы около 120гб.
Таблица list_subscriber - 20 миллионов записей.
Таблица list_field_value - 50 миллионов записей.
Запрос выполняется примерно 5 секунд, но на странице подобных запросов может быть больше и сами запросы могут быть сложнее, больше join, больше условий.
Возможно ли как-то оптимизировать запрос или таблицы, возможно конфигурацию сервера стоит изменять, но буквально не так давно подобных проблем не было. Проблемы появились после увеличения данных в таблицах из запроса.
EXPLAIN запроса:
EXPLAIN SELECT COUNT(DISTINCT t.subscriber_id) as counter
FROM `list_subscriber` `t`
LEFT JOIN `list_field_value` `fieldValues984` ON `fieldValues984`.`subscriber_id`=`t`.`subscriber_id`
WHERE
`t`.`list_id` = 60
AND `t`.`status` = 'confirmed'
AND `fieldValues984`.`field_id` = 984
AND `fieldValues984`.`value` LIKE '%2022%'