2014-02-24 25 views
0

我在一个数据库中有两个表,大约有50,000到70,000行。两者都是MyISAM。首先,yahooprices包含项目和定价(列价格)的SKU代码(列代码)。第二个表combined_stock包含零件编号(与代码相同的信息,但排序不同),价格,数量和描述。价格目前定义为FLOAT 10,2并设为0.00。我试图从yahooprices拉过来定价(也FLOAT 10,2)在使用本声明combined_stock:MySQL声明花费异常长

UPDATE combined_stock dest LEFT JOIN (
SELECT price, code FROM yahooprices 
) src ON dest.partnumber = src.code 
SET dest.price = src.price 

我知道这种说法工作,因为我想它在一个较小的测试量。他们有部分编号和代码作为非唯一索引。我也尝试在两个表上索引价格,看看是否会加快查询速度。从技术上讲,它应该在几秒钟内完成,但最后一次我尝试运行这个,它坐在那里一夜之间,即使如此,我很确定它没有成功。任何人有任何疑难解答建议

+0

分享数据结构,特别是针对相关列的每个表。数据类型,索引(和类型)等。 –

+1

为什么要进行左连接?更重要的是,你为什么要在两个地方存储相同的数据? –

回答

0

我会建议一些相对较小的变化。首先,摆脱子查询。二,切换到内连接:

UPDATE combined_stock dest JOIN 
     yahooprices src 
     ON dest.partnumber = src.code 
    SET dest.price = src.price; 

最后在yahooprices(code, price)上创建一个索引。

如果您确实希望在没有匹配的情况下将价格设置为NULL,则可以离开left outer join

+0

这工作完美。声明花费了0.7毫秒。 – Kazoou