作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 2 个表,一个称为 raw_data
,有 150m 行,另一个称为 venue
,也有大约 150m 行。我正在尝试运行以下查询,但几个小时后它似乎陷入困境。在 raw_data
中,MemberID
和 SiteID
有索引,在 venue
中,PersonID
和 SiteID
有索引,两个表的存储引擎都是 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/
我是一名优秀的程序员,十分优秀!