Answers:
索引过程首先在_idx
表中写入值,这样它在运行时不会干扰主表上的读取操作。
当所有值都插入_idx
表中后,所有值都将复制到主表中。
看一下看起来如何Mage_CatalogInventory_Model_Resource_Indexer_Stock::reindexAll
。
还可以在下面的代码中查看我的评论:
public function reindexAll()
{
$this->useIdxTable(true); //tell the indexer to use the _idx table
$this->beginTransaction();
try {
$this->clearTemporaryIndexTable(); //clear data from the _idx table
foreach ($this->_getTypeIndexers() as $indexer) {
$indexer->reindexAll(); //reindex everything in the _idx table
}
$this->syncData(); //clear the main table and insert the values from the _idx table.
$this->commit();
} catch (Exception $e) {
$this->rollBack();
throw $e;
}
return $this;
}