【发布时间】:2016-11-18 14:19:11
【问题描述】:
我有 2 张表,其中一张名为 raw_data,有 150m 行,另一张名为 income,也有大约 150m 行。我正在尝试运行以下查询,几个小时后它似乎卡住了。在raw_data、MemberID 和SiteID 有索引,在income、PersonID 和SiteID 有索引,这两个表的存储引擎都是MyISAM,因为我们使用的是%99 选择查询。
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`
您能帮我提高性能并减少此查询的时间吗?
【问题讨论】:
-
也许张贴 EXPLAIN 的输出以帮助诊断性能不佳?
-
+1 解释计划。这又是什么意思“被卡住”?查询是否完成?它会部分或全部更新您的数据吗?
-
它根本不工作,表被锁定所以无法检查状态。几个小时后,我终止了查询。
-
试过解释,即使我使用的是mysql 5.6,当我在查询前面添加解释时也会出现语法错误。
-
"两个表的存储引擎都是 MyISAM,因为我们使用的是 %99 选择查询" - 这不是使用 MyISAM 的论据。过去是这样,但由于 MySQL 5.3 InnoDB 的 SELECT 性能与 MyISAM 一样好或更好。
标签: mysql performance join