使用MAX()和MIN()从另一个表更新表+性能问题

时间:2013-10-19 10:48:43

标签: mysql database sql-update max min

我有一个问题,我过去2天试图解决,我有2个表,workspatxtractor_wrkxtractor_wrk包含250000行,workspat包含6700万行。

CREATE TABLE `xtractor_wrk` (
  `db_time` datetime DEFAULT NULL,
  `db_position` point NOT NULL,
 `db_namn` char(50) CHARACTER SET utf8 COLLATE utf8_swedish_ci NOT NULL,
 `db_sis` mediumint(8) unsigned DEFAULT NULL,
 `db_om` smallint(5) unsigned DEFAULT NULL,
 `db_seq` char(50) DEFAULT NULL,
 `db_grarri` datetime DEFAULT NULL,
 `db_grtime` datetime DEFAULT NULL,
 KEY `db_time` (`db_time`),
 KEY `db_sis` (`db_sis`),
 KEY `db_om` (`db_om`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC

CREATE TABLE `workspat` (
 `db_time` datetime NOT NULL,
   `db_point` point NOT NULL,
 `db_om` smallint(6) NOT NULL,
 `db_sis` mediumint(8) NOT NULL,
 `db_status` char(10) CHARACTER SET latin1 NOT NULL,
 KEY `db_sis` (`db_sis`),
 KEY `db_om` (`db_om`),
 KEY `db_time` (`db_time`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

我有两个问题:

我想做的是用MAX更新我的表xtractor_wrk(workspat.db_time) 结果中的MIN(workspat.db_time)来自下面的“ON”。

我尝试了很多东西,但唯一认为我有点工作的是:

UPDATE xtractor_wrk 
JOIN workspat 
ON  date(xtractor_wrk.db_time) =    date(workspat.db_time) 
    and xtractor_wrk.db_om = workspat.db_om 
    and    xtractor_wrk.db_sis = workspat.db_sis 
SET xtractor_wrk.db_grtime =    workspat.db_time

当然这并没有给我xtractor_wrk的MAX和MIN更新 是唯一对我来说远程工作的东西。

workspat.db_time可以有任意数量的匹配,我想要最高和最低,并将它们写入xtractor_wrk.db_grtimextractor_wrk.db_grarri

我也有速度问题,我尝试过索引,但它仍然很慢,有没有办法跨表索引或是我的问题所有的更新?我可以将结果写入新表而不是更新或延迟更新,因为它的250000行要更新吗?我该怎么做?

1 个答案:

答案 0 :(得分:0)

尝试仅建议

添加新列,表示已更新或不更新,如果已更新,则为0;如果未更新,则添加0,并添加where子句以便更快地更新。

示例:

column 1 column 2 column 3 ... Updated
                                  0
                                  1
                                  0
                                  0
                                  1