MySQL具有双内连接的较差更新性能

时间:2016-11-18 14:19:11

标签: mysql performance join

我有两个表,一个称为raw_data,其行为150米,另一个称为income,其行也约为150米。我试图运行以下查询,它似乎在几个小时后卡住了。在raw_data中,MemberIDSiteID有索引,incomePersonIDSiteID都有索引,这两个表的存储引擎因为我们正在使用%99选择查询,所以是MyISAM。

UPDATE `income` `t1` 
INNER JOIN `raw_data` `t2` 
   ON `t1`.`PersonID` = `t2`.`MemberID` AND `t1`.`SiteID` = `t2`.`SiteID` 
SET `t1`.`Age` = `t2`.`Age`, 
     `t1`.`Gender` = `t2`.`Gender`, 
     `t1`.`Sport` = `t2`.`Sport`, 
     `t1`.`PersonType` = `t2`.`PersonType`, 
     `t1`.`BookingType` = `t2`.`BookingType`, 
     `t1`.`TemplateName` = `t2`.`TemplateName`

请您帮我改进性能并缩短查询时间吗?

1 个答案:

答案 0 :(得分:0)

MyISAM 锁定表,直到完成。

使用'复合'索引可以更快地运行查询(我不确定哪一个是首选,也可以同时添加两者。):

income:    INDEX(PersonID, SiteID) -- in either order
raw_data:  INDEX(MemberID, SiteID) -- in either order

注意:两列上的单独的索引(听起来像你有)将一样好。

您还应该Switch to InnoDB。 99%的选择不足以成为使用过时的,很快被移除的MyISAM的理由。

为什么要将数据从一个表复制到另一个表?为什么不在需要时简单地JOIN两个表。或者,换句话说,“冗余数据是禁止的”。

Here是关于'chunking'UPDATE以使其更加文明的建议。