将最后看到的值保留在摘要表中

时间:2016-07-25 06:25:47

标签: mysql

我有两张桌子:

参数会保留所有para_id及其名称,并始终更新为包含所有参数。

CREATE TABLE `parameters` (
  `para_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) NOT NULL DEFAULT '',
  PRIMARY KEY (`para_id`),
  UNIQUE KEY `idx_parameters_name` (`name`)
) ENGINE=InnoDB;

处理每5分钟保存一大块数据。

CREATE TABLE `processing` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `t_ns` bigint(20) unsigned NOT NULL DEFAULT '0',
  `para_id` int(10) unsigned NOT NULL DEFAULT '0',
  `value` varchar(1024) NOT NULL DEFAULT '',
  `isanchor` tinyint(1) NOT NULL DEFAULT '0',
  PRIMARY KEY (`id`),
  KEY `data` (`para_id`,`t_ns`)
) ENGINE=InnoDB;

我想保留一个表 actual_values ,其中包含每个参数(如果它在处理中发生)的最后看到的值。在更新之前,使用INSERT IGNORE更新para_ids。目前我有这些疑问:

INSERT IGNORE INTO actual_values (para_id) (SELECT DISTINCT para_id FROM parameters);

UPDATE  actual_values a
JOIN processing p ON a.para_id = p.para_id
SET a.value = (SELECT p.value FROM processing p WHERE a.para_id = p.para_id ORDER BY t_ns DESC LIMIT 1);

我觉得这不是最佳方式,需要很长时间。你们有更好的建议吗?

0 个答案:

没有答案