@AlexRas

Как можно оптимизировать запрос sql или конфигурацию сервера mysql?

Всем привет.

Есть такой запрос:

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 миллионов записей.
632a13b885fb8762082016.png
Таблица list_field_value - 50 миллионов записей.
632a13bedeb37728160441.png
Запрос выполняется примерно 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%'

632a184a1ff91805576753.png
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
swanrnd
@swanrnd
Издатель HTML5 игр
Like вообще беда, нормально индексе работают только example.ru%
Можно попробовать поиграться с кодировкой поле к которому применяется Like.
Убрать регистрозависимость. То есть использовать в поле и в поиске только строчные буквы.
У нас был MS SQL и это положительно повлияло на LIKE %example.ru%
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы