これについてオンラインで情報を見つけることはできません。パーティション表を変更する
既にパーティション化されている表を変更する最適な方法は何ですか?
私は普通の
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(プライマリキー) 'はパフォーマンスには役に立たない。パーティショニングによってどこから得たいと思っていますか?また、16パーティション表には約100MBのオーバーヘッドがあります。 –
"ハッシュ"が非常にランダムであると仮定すると、あなたは常にテーブルの周りを飛び回っています。テーブル全体をキャッシュするのに十分なRAMがないと思いますか?したがって、パフォーマンスが低下します。 –