【问题标题】:Add Columns VS Foreign Key on new table在新表上添加列 VS 外键
【发布时间】:2016-07-02 17:36:15
【问题描述】:

我有一个后处理应用程序,需要为数百万记录表的每个条目添加三个值。该过程每 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 的四列的新表。

【问题讨论】:

  • SHOW CREATE TABLE。向我们展示您的初步查询。

标签: mysql indexing foreign-keys


【解决方案1】:

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

如果您始终将其添加到单独的表中,则必须在检索数据时加入这两个表,在这种情况下,您可以将外键添加到其他表,但您必须遵循上述过程,因为更改并不容易任务。

【讨论】:

  • 我之前加过栏目。需要一些时间,但 300 万个条目还不错。什么对性能更好。更新和插入一样快吗?主 ID 上的外键是否与带有选择的附加列的速度相同?
猜你喜欢
  • 2011-06-28
  • 2019-10-15
  • 1970-01-01
  • 2019-12-23
  • 2018-07-19
  • 2023-01-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多