我在网上找不到关于此的信息。更改分区表
改变已分区表的最佳方法是什么?
我应该只是使用普通
UPDATE `table` MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL;
和锁表几分钟
,或者我应该运行由分区命令分区?
UPDATE `table` PARTITION (p0) MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL;
您的建议是? 如果不是所有的分区完全相同,会发生什么?这甚至有可能吗?
这是create语句:
CREATE TABLE `redirects` (
`emailhash` varchar(100) NOT NULL,
`f_email_log` varchar(50) NOT NULL,
`linknum` int(11) NOT NULL DEFAULT '1',
`redirect` varchar(500) NOT NULL,
`clicked` int(11) NOT NULL DEFAULT '0',
`clicktime` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`emailhash`),
KEY `f_email_log` (`f_email_log`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
/*!50100 PARTITION BY KEY (emailhash)
PARTITIONS 16 */
表有大约40万条记录。
我想减少一些像INT到TINYINT字段的大小,因为这些值大多是1-30或0/1,以及varchar长度,因为我发现这些数字太大,可以是降低。
我已将代码添加到原始问题中。任何想法? –
'PARTITION BY KEY(the-primary-key)'对性能无用。你希望通过分区获得什么?另外,16分区表大约有100MB的开销。 –
假设“哈希”是非常随机的,你一直在桌子上跳来跳去。我假设你没有足够的内存来缓存整个表格?因此表现会受到影响。 –