InnoDB 外键和 MySQL 分区
InnoDB foreign keys and MySQL partitioning
我使用MySQL 服务器版本:5.7.32-0ubuntu0.16.04.1 (Ubuntu)。在我的数据库中,我有这个 table 和百万条记录:
CREATE TABLE `tableA` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NULL DEFAULT NULL,
`value` int(11) NOT NULL,
`tableB_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_sjfet8dx50bhix3ub1dwocpcx` (`timestamp`,`tableB_id`),
KEY `FK_su2f3awnwvdpq1h3x5x0drjaw` (`tableB_id`),
CONSTRAINT `FK_su2f3awnwvdpq1h3x5x0drjaw` FOREIGN KEY (`tableB_id`) REFERENCES `tableB` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
是否可以按范围使用分区(在本例中按年份)?
有外键也能分区吗?
谢谢!
没有.
https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations.html 说:
Foreign keys not supported for partitioned InnoDB tables. Partitioned tables using the InnoDB storage engine do not support foreign keys.
你不能按年份对这个 table 进行分区,因为 table 上的每个唯一键都必须使用 table 分区中的每一列表达式.
阅读 https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-partitioning-keys-unique-keys.html 了解详细信息。
我使用MySQL 服务器版本:5.7.32-0ubuntu0.16.04.1 (Ubuntu)。在我的数据库中,我有这个 table 和百万条记录:
CREATE TABLE `tableA` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`timestamp` timestamp NULL DEFAULT NULL,
`value` int(11) NOT NULL,
`tableB_id` bigint(20) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `UK_sjfet8dx50bhix3ub1dwocpcx` (`timestamp`,`tableB_id`),
KEY `FK_su2f3awnwvdpq1h3x5x0drjaw` (`tableB_id`),
CONSTRAINT `FK_su2f3awnwvdpq1h3x5x0drjaw` FOREIGN KEY (`tableB_id`) REFERENCES `tableB` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
是否可以按范围使用分区(在本例中按年份)?
有外键也能分区吗?
谢谢!
没有.
https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations.html 说:
Foreign keys not supported for partitioned InnoDB tables. Partitioned tables using the InnoDB storage engine do not support foreign keys.
你不能按年份对这个 table 进行分区,因为 table 上的每个唯一键都必须使用 table 分区中的每一列表达式.
阅读 https://dev.mysql.com/doc/refman/8.0/en/partitioning-limitations-partitioning-keys-unique-keys.html 了解详细信息。