I have an external file containing product details, I'm looping through this file and for each product in said file I have to check if the product already exists in magento.
The value to evaluate if the product already exists is an attributename and it's value.
So I check this by using (per product)
$collection = Mage::getModel('catalog/product')
->getCollection()
->addAttributeToSelect('sku')
->addAttributeToSelect("$supplier_name")
->addAttributeToSelect('production_nr')
->addAttributeToSelect('sku_supplier')
->addAttributeToFilter($supplier_name,array('eq' => $suppliers_product_nr));
This selection itself doesn't seem to take much time:
echo 'check: ',round(microtime(true) - $time, 2) , "s<br/>\n";
reports 0.00 s,
however to check if it's an empty collection (ie the product exists in my magento database takes about 0.34-0.40 s
$collection->getSize()
Considering I've got several hundred of thousands of products to check. This will add up quickly. Very quickly. I was hoping for something more akin to 0.01 or lower in time.
So I'm looking for the fastest way to check if a product exists. I have quite a bit of freedom in how to change and implement the code so if there's an completely different way of appreaching this problem I'd like to hear about it.
Update:
I've changed it slightly so that instead of checking with magento if a product exists product by product, I instead get an array of all products that have the attribute to check against. I use this array to check if the attribute to check against exists.
This is way faster, but I fear for the overhead impact (primarily ram or cpu) this will have once the amount of products returned becomes too great (we've got about 40.000 products in our magento installation)
Due to the excessively large file I loop through it using XMLReader and pass the xml of a single node once I reach a product node, this singular node containing the data is then passed through simplexml to make it easy to use.
– Tropus Mar 16 '17 at 15:58