优化比较查询

时间:2012-05-29 08:19:13

标签: mysql compare

我有两张完全相同的表 - 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 #

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”,你想添加那些吗?通过这种方法,您可以在一个结果集中获得所需的一切。

如果这是您的意图,您可以随时进行相关更新(对于现有条目),或插入(如果尚未在实时文件上)。