Блог

Повышение производительности MySQL с помощью индексов

23 ноября 2020

Чтобы понять какие индексы нам может потребоваться создать, необходимо:

  1. Получить список всех запросов, в том числе количество запусков и время исполнения каждого запроса.
  2. Перемножить количество запусков на время исполнения и посмотреть на топ ресурсоёмких запросов. Их нам и надо оптимизировать.

Например, для Битрикса дали хороший прирост индексы для фасетных индексов и для элементов инфоблоков:

ALTER TABLE `b_iblock_17_index` ADD INDEX `b_iblock_17_index_idx_facet_id_value` (`FACET_ID`,`VALUE`);
ALTER TABLE `b_iblock_17_index` ADD INDEX `b_iblock_17_index_idx_sectio_facet_value_elemen_value` (`SECTION_ID`,`FACET_ID`,`VALUE_NUM`,`ELEMENT_ID`,`VALUE`);
ALTER TABLE `b_iblock_element` ADD INDEX `b_iblock_element_idx_active_active_iblock_wf_id_wf_id` (`ACTIVE_TO`,`ACTIVE_FROM`,`IBLOCK_ID`,`WF_STATUS_ID`,`WF_PARENT_ELEMENT_ID`);

Для модуля SEO умный фильтр от Сотбита эти 2 индекса:

ALTER TABLE `b_sotbit_seometa_chpu` ADD INDEX `b_sotbit_seometa_c_idx_new_url_id` (`NEW_URL`(255),`ID`);
ALTER TABLE `b_sotbit_seometa_chpu` ADD INDEX `b_sotbit_seometa_c_idx_real_url_id` (`REAL_URL`(255),`ID`);

Сильно может помочь в создании необходимых индексов сервис EverSQL. Бесплатно только одна оптимизация в месяц, остальное по тарифам сервиса.

Битрикс Просмотров: 12
Категории: