gpt4 book ai didi

MySQL 使用双重内连接更新性能较差

转载 作者:行者123 更新时间:2023-11-29 19:56:36 26 4
gpt4 key购买 nike

我有 2 个表,一个称为 raw_data,有 150m 行,另一个称为 venue,也有大约 150m 行。我正在尝试运行以下查询,但几个小时后它似乎陷入困境。在 raw_data 中,MemberIDSiteID 有索引,在 venue 中,PersonIDSiteID 有索引,两个表的存储引擎都是 MyISAM,因为我们使用的是 %99 select 查询。

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`

您能帮助我提高性能并减少此查询的时间吗?

最佳答案

MyISAM 锁定表直到完成。

使用“复合”索引,查询运行速度会快得多(我不确定首选哪一个,也可以同时添加两者。):

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

注意:两列上的单独索引(听起来像是您拥有的)不会那么好。

您还应该Switch to InnoDB 。 99% Selects 并不足以成为使用过时且即将被删除的 MyISAM 的借口。

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

Here建议对UPDATE进行“分块”以使其更加文明。

关于MySQL 使用双重内连接更新性能较差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40679329/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com