加入和更新需要太长时间

时间:2017-08-08 11:37:51

标签: mysql sql

我有两个表FACT_SALEDIM_PRODUCT,它们的产品名称都是通用的,我想将DIM_PRODUCT的ID设置为外键。使用DIM_PRODUCT表的不同名称值创建FACT_SALE

UPDATE FACT_SALE FS
JOIN DIM_PRODUCT DP ON FS.PRODUCT_NAME = DP.NAME
SET FS.PRODUCT_KEY = DP.ID 

我写的这个查询永远运行,数据库中也没有反映出任何变化。 FACT_SALE table中只有十万条记录(10万)。但是,如果我使用Joining two table运行一个select查询,它会快速运行。

我可以知道这个问题的根本原因是什么吗?

3 个答案:

答案 0 :(得分:4)

对于此查询:

UPDATE FACT_SALE FS JOIN
       DIM_PRODUCT DP
       ON FS.PRODUCT_NAME = DP.NAME
SET FS.PRODUCT_KEY = DP.ID ;

您需要DIM_PRODUCT(NAME, ID)上的索引:

CREATE INDEX IDX_DIM_PRODUCT_NAME_ID ON DIM_PRODUCT(NAME, ID);

答案 1 :(得分:1)

您是否有任何一个加入列FACT_SALE.PRODUCT_NAMEDIM_PRODUCT.NAME的索引?如果您在其中任何一列上都有索引可能会降低更新速度,因为索引必须与数据一起更新。

this SO question开始,索引只会使WHERE子句中的列受益。但是,由于您没有WHERE子句,索引可能会受到伤害而无法帮助。

答案 2 :(得分:0)

UPDATE FACT_SALE FS
INNER JOIN DIM_PRODUCT DP ON FS.PRODUCT_NAME = DP.NAME
SET FS.PRODUCT_KEY = DP.ID 

首先,使用 INNER JOIN 替换联接。

您需要在 ON 条件中使用 JOIN 子句在列上创建索引。