【问题标题】:Update table with MAX() and MIN() from another table + performance problems使用另一个表中的 MAX() 和 MIN() 更新表 + 性能问题
【发布时间】:2013-10-28 05:08:43
【问题描述】:

我有一个问题,我在过去 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(workspat.db_time) 更新我的表 xtractor_wrk 以及我从下面的“ON”得到的结果中的 MIN(workspat.db_time)。

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

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

当然这并没有给我 MAX 和 MIN 更新到 xtractor_wrk 它只是这个 是唯一对我有用的东西。

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

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

【问题讨论】:

  • 我们需要更多信息“show create table table_name”输出
  • 我已将创建表添加到我的问题中

标签: mysql database sql-update max min


【解决方案1】:

仅尝试建议

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

例子:

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

【讨论】:

    猜你喜欢
    • 2011-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多