我有两张完全相同的表 - products和products_temp。我想比较两个表,我现在正在使用下面的查询,如果每个表中没有很多产品,那么工作正常,但是我现在每个都有大约10,000个,它需要永远运行然后因错误而死掉' mysql服务器已经消失了'。
请查看下面的查询,并建议我如何优化它
SELECT MIN( id ) AS id , product_id, product_name, program_id, program_name, deeplink, price, image_url, merchant_category, category_id, category_path, brand, last_updated, tab
FROM (
SELECT id , product_id, product_name, program_id, program_name, deeplink, price, image_url, merchant_category, category_id, category_path, brand, last_updated, 'Temp' AS tab
FROM products_temp AS alias1
UNION ALL
SELECT id , product_id, product_name, program_id, program_name, deeplink, price, image_url, merchant_category, category_id, category_path, brand, last_updated, 'Current' AS tab
FROM products AS alias2
)AS alias_table
GROUP BY id
HAVING COUNT( id ) =1 #
答案 0 :(得分:0)
您的查询显然总是从“Temp”或“Live”表返回每个ID,从而返回每一行。您实际上可能正在寻找的是......从“Temp”表中的所有记录中,它们是否已存在于“实时”表中,或者它们是否为新的并且需要更新/刷新。为了得到这个答案,我会做一个类似
的左连接选择 TMP。*, if(products.id IS NULL,1,0)为NotOnLiveFile 从 products_temp tmp 离开加盟产品 在tmp.ID = products.id
无需分组,也不需要HAVING子句。如果产品已经是ON文件,你想用它做什么...用Temp中的那些更新实时值?如果记录是“NotOnLiveFile”,你想添加那些吗?通过这种方法,您可以在一个结果集中获得所需的一切。
如果这是您的意图,您可以随时进行相关更新(对于现有条目),或插入(如果尚未在实时文件上)。