在新表上添加列VS外键

时间:2016-07-02 17:36:16

标签: mysql indexing foreign-keys

我有一个后期处理应用程序,需要为数百万记录表的每个条目添加三个值。该过程每15分钟运行一次,需要在此表的每一行中添加三个值。是否更好地向此表添加三列(更新)或创建一个带有外键的新表(插入)?

编辑: 认为这是一个更普遍的问题,但是根据要求:

CREATE TABLE `position` (
`idPosition` int(10) unsigned NOT NULL AUTO_INCREMENT,
`idRover` int(10) unsigned DEFAULT NULL,
`TimeHack` datetime NOT NULL DEFAULT '1970-01-01 00:00:00',
`Milliseconds` smallint(4) unsigned NOT NULL DEFAULT '0',
`n` double NOT NULL DEFAULT '0',
`e` double NOT NULL DEFAULT '0',
`z` double NOT NULL DEFAULT '0',
`nx` double DEFAULT '0',
`ny` double DEFAULT '0',
`nz` double DEFAULT '1',
`valid` tinyint(1) DEFAULT '0',
`Reverse` tinyint(1) NOT NULL DEFAULT '0',
`Azimuth` double DEFAULT '0',
`cutfill` double DEFAULT NULL,
PRIMARY KEY (`idPosition`),
UNIQUE KEY `positionrovertime` (`idRover`,`valid`,`TimeHack`,`Milliseconds`),
 KEY `fkPositionidRover` (`idRover`),
CONSTRAINT `fkPositionidRover` FOREIGN KEY (`idRover`) REFERENCES `rover` (`idRover`) ON DELETE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=574050 DEFAULT CHARSET=latin1;

不是我的设计,只是我的工作。我知道有一堆WTF。我需要在这个表的PK上添加3列双打或新表,其中包含四列PK和FK。

1 个答案:

答案 0 :(得分:0)

它将取决于您的要求,您可以使用正常化指南进行检查,但更改具有数百万条记录的表将不是一件容易的事,因此如果您真的想将其添加到同一个表中,请创建具有这3个附加列的临时表,然后将旧表中的所有数据加载到新表中。删除旧表并将新表重命名为旧表名。

如果你将它添加到单独的表中总是你必须在检索数据时加入这两个表,在这种情况下你可以将外键添加到其他表但是你必须遵循上面提到的过程因为改变并不容易任务。