7

我已经非常努力地理解cataloginventory_stock 关系——我知道stock_item 和stock_status 表都会在库存项目被修改时更新,但我无法弄清楚stock_status_idx 表是否真的是必需的。

据我所知,stock_status_idx 表包含与 stock_status 表相同的信息。它只是一个临时表吗?如果我手动更新 stock_item 和 stock_status 表,但没有更新 stock_status_idx 表,我没有看到任何错误的库存状态问题。

问题是..我认为它以某种方式用于缓存/索引器。但是,即使我没有修改 stock_status_idx 表,库存状态在后端和前端都显示得很好。

那么,stock_status_idx 表的意义何在?

非常感谢你的帮助。

4

3 回答 3

10

我想知道同样的问题并决定挖掘,因为我无法在任何地方找到答案。似乎 _tmp 和 _idx 被用作索引数据的临时持有者。

例如,您可以查看其中的reindexAll()方法app/code/core/Mage/Catalog/Model/Resource/Category/Indexer/Product.php,您将了解它在生成索引时使用 _idx 表来临时存储它的数据:

$this->useIdxTable(true);
...
$idxTable = $this->getIdxTable();
....
$query = $select->insertFromSelect($idxTable, ...

在同一方法结束时,您会注意到一个不错的$this->syncData()方法调用。你可能猜到了!该函数存在 app/code/core/Mage/Index/Model/Resource/Abstract.php并正在这样做,将_idx与main同步:

$this->_getWriteAdapter()->delete($this->getMainTable());
$this->insertFromTable($this->getIdxTable(), $this->getMainTable(), false);
$this->commit();

祝你好运!

于 2014-12-18T21:47:13.380 回答
2

idx 表仅在 Magento 需要根据库存项目选择许多产品时使用,因此这些表上的索引比使用主库存表更快。

我建议您也将数据写入此表。或者更好的是,使用 Magento API 或 Magento App over PHP 写入 Magento 数据库,更安全。

于 2012-04-08T15:28:44.837 回答
0

我出于同样的原因(直接在 Mysql 中更新库存数量)对此进行了研究,并将使用 Magento 的内置索引器功能和 "cataloginventory_stock" 。我喜欢这个功能,因为它只需要几秒钟就可以在我的服务器上运行。

您可以访问 magento 索引器并获取一些不错的信息

/[您的商店主页]/shell 然后运行:/usr/bin/php -f indexer.php info

这是仅运行目录库存重新索引的 crontab 行: 30 3 * * * /usr/bin/php -f /home/client/www/shell/indexer.php --reindex cataloginventory_stock

于 2014-10-01T15:58:28.813 回答