If you only want to update a single product attribute without running the indexer, use the following method. It will be possible to update a couple of hundred products per second that way.
First, add a new product attribute estimated_time_of_arrival
.
The, in your update script:
$product->addAttributeUpdate(
'estimated_time_of_arrival',
$date,
$storeId // numeric store id value, e.g. Mage::app()->getStore()->getId()
);
If it's a global scope attribute, the $storeId
doesn't even matter.
If you don't care about the store ID scope, you can also use:
$product->setData('estimated_time_of_arrival', $date)
->getResource()
->saveAttribute($product, 'estimated_time_of_arrival');
Both methods are equivalent (the latter will use $product->getStoreId()
if the attribute has a website or store view scope).
Of course, if you use that attribute in some way that requires indexing, you will have to reindex after the updates.
I found what's the problem.
There were missing rows in catalog_product_relation
which is used by indexers.
It was caused by a third party extension.
After making a script to insert those missing values, the rows in catalog_product_index_eav
were inserted by indexers, how it should.
The code above will work to reindex each product individually.
Best Answer
Bigger part of indexes are now meant to run in background. You have also option to schedule cron indexing. See http://www.magentocommerce.com/knowledge-base/entry/ee113-indexing for more details. There is no proof way to manually re-index via Admin