mysql 外键分区_分区具有外键的mySQL表?

它取决于分区表中行的大小是否需要分区的原因.

如果行大小很小并且分区的原因是行数,那么我不确定你应该做什么.

如果行大小很大,那么您是否考虑过以下内容:

设P为分区表,F为be-be外键中引用的表.创建一个新表X:

CREATE TABLE `X` (

`P_id` INT UNSIGNED NOT NULL,-- I'm assuming an INT is adequate,but perhaps

-- you will actually require a BIGINT

`F_id` INT UNSIGNED NOT NULL,PRIMARY KEY (`P_id`,`F_id`),CONSTRAINT `Constr_X_P_fk`

FOREIGN KEY `P_fk` (`P_id`) REFERENCES `P`.`id`

ON DELETE CASCADE ON UPDATE RESTRICT,CONSTRAINT `Constr_X_F_fk`

FOREIGN KEY `F_fk` (`F_id`) REFERENCES `F`.`id`

ON DELETE RESTRICT ON UPDATE RESTRICT

) ENGINE=INNODB CHARACTER SET ascii COLLATE ascii_general_ci

并且至关重要的是,创建一个存储过程来向表P添加行.您的存储过程应该确定(使用事务),每当向表P添加一行时,相应的行将添加到表X.您不能允许行为以“正常”方式添加到P!如果继续使用存储过程添加行,则只能保证将保留参照完整性.但是,您可以以正常方式从P中自由删除.

这里的想法是你的表X有足够小的行,你应该不需要对它进行分区,即使它有很多行.我猜,桌子上的索引将占据相当大的一块内存.

如果您需要在外键上查询P,您当然会查询X,因为这是外键的实际位置.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值