Magento использует триггеры базы данных MySQL для улучшения доступа к базе данных при переиндексации .
Magento не поддерживает custom triggers
в базе данных Magento потому что пользовательские триггеры могут создавать несовместимости с будущими версиями Magento.
Механизм индексации Magento использует значение состояния в процессе запуска переиндексации.
Вы можете проверить состояние индексатора в панели администратора
Система> Управление новыми индексами
или вручную с помощью командной строки. Просмотр списка индексаторов
Чтобы просмотреть список всех индексаторов:
bin/magento indexer:info
Список отображается следующим образом:
catalog_category_product Category Products
catalog_product_category Product Categories
catalog_product_price Product Price
catalog_product_attribute Product EAV
cataloginventory_stock Stock
catalogrule_rule Catalog Rule Product
catalogrule_product Catalog Product Rule
catalogsearch_fulltext Catalog Search
Как это работает?
Короче говоря, Magento 2 создает триггеров для каждого “Update by Schedule”
индекса.
Эти триггеры срабатывают по любому INSERT, UPDATE and DELETE
в любой из таблиц сущности.
При запуске они создают новую запись с идентификатором сущности в конкретной таблице изменений.
Когда запускается задание cron, оно сравниваетversion_id его таблицы mview_state с version_ids таблицы журнала изменений.
Индекс обновляется для всех объектов, помеченных как измененные.Кэши для определенных объектов также аннулируются (очищаются).
Триггеры
Когда для индекса установлено значение «Обновление по расписанию», Magento 2 создает серию триггеров для него.Только для catalog_product_flat создано 30 триггеров.
mysql> show triggers \G
*************************** 1. row ***************************
Trigger: trg_catalog_product_entity_after_insert
Event: INSERT
Table: catalog_product_entity
Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (NEW.`entity_id`);
END
Timing: AFTER
Created: 2018-01-10 16:04:59.54
sql_mode:
Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
*************************** 2. row ***************************
Trigger: trg_catalog_product_entity_after_update
Event: UPDATE
Table: catalog_product_entity
Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (NEW.`entity_id`);
END
Timing: AFTER
Created: 2018-01-10 16:04:59.56
sql_mode:
Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
*************************** 3. row ***************************
Trigger: trg_catalog_product_entity_after_delete
Event: DELETE
Table: catalog_product_entity
Statement: BEGIN
INSERT IGNORE INTO `catalog_product_flat_cl` (`entity_id`) VALUES (OLD.`entity_id`);
END
Timing: AFTER
Created: 2018-01-10 16:04:59.57
sql_mode:
Definer: some-magento-user@localhost
character_set_client: utf8
collation_connection: utf8_general_ci
Database Collation: latin1_swedish_ci
Все три триггера, которые вы видите здесь, реагируют на изменения в таблице «catalog_product_entity» (см. Таблицу).События: INSERT, UPDATE и DELETE.Поскольку существует 10 таблиц, которые влияют на содержимое материализованного представления catalog_product_flat, для всех случаев необходимо триггеры 3 x 10 = 30.
Заключение
Если вы хотитеизменить каталог товаров так, как это невозможно через панель администратора Magento, или это можно сделать быстрее с помощью прямого запроса SQL с помощью phpMyAdmin или с помощью скрипта, это все еще возможно, даже в производственном интернет-магазине.Конечно, вы должны хорошо знать таблицы MySQL Magento.Но методы частичной переиндексации из Update by Schedule гарантируют, что все необходимые индексы и плоские таблицы будут обновлены, и даже определенные кэши станут недействительными.
Ссылки: