Нам пришлось столкнуться что на реально большой базе индексация цен… мягко скажем сбоит. А грубо — админ товар добавил, а на сайте его то и нет. Вызов регенерации индексов валит базу( что же делать?
SQLSTATE[42S22]: Column not found: 1054 Unknown column 'e.1' in ...
Мы как умные программисты анализируем какие у нас реально используется цены — и составляем схему. И так как мы еще и ленивые, то делаем минимальные апдейты. Например нам повезло, и у нас только цены третьей группы не такие как все), а цены не меняются через админку прямо, только добавляются новые товары. Поэтому схема наша проста (главная функция restorePrices): проверяем кого из товаров в индексе не хватает и забираем его групповые цены для 3, после чего ручками вставляем в индексную таблицу (вставку можно сделать массовой, но на момент «сбоев» мы можем и кусочково вставлять до достижения цели. По хорошему — можно обернуть в одну транзакцию.