Je ne trouve pas d'informations en ligne à ce sujet.Modification d'une table partitionnée
Quelle est la meilleure façon de modifier une table déjà partitionnée?
dois-je simplement utiliser la
normaleUPDATE `table` MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL;
et verrouiller la table pendant plusieurs minutes
ou devrais-je utiliser cette partition de commande par partition?
UPDATE `table` PARTITION (p0) MODIFY COLUMN `column_name` TINYINT(1) DEFAULT 1 NOT NULL;
Quelles sont vos recommandations? Que se passe-t-il si toutes les partitions ne sont pas exactement égales? est-ce que c'est possible?
Ceci est la 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 */
Le tableau a environ 40 millions de disques. Je veux réduire la taille de certains champs comme INT à TINYINT puisque ces valeurs sont principalement 1-30 ou 0/1, ainsi que les longueurs de varchar depuis que j'ai trouvé que ces nombres sont trop grands et peuvent être réduit.
J'ai ajouté le code à la question d'origine. Une idée? –
'PARTITION BY KEY (la clé primaire)' est inutile pour la performance. Qu'espérez-vous gagner en partitionnant? En outre, il y a environ 100 Mo de surcharge pour une table à 16 partitions. –
En supposant que "hash" est très aléatoire, vous êtes obligé de sauter autour de la table tout le temps. Je suppose que vous n'avez pas assez de RAM pour mettre en cache toute la table? D'où la performance va souffrir. –