J'ai une grande table avec environ 2Mln enregistrements, et je veux le partitionner. J'ai la colonne id comme PRIMARY AUTO_INCREMENT int (et il doit être toujours UNIQUE). J'ai une colonne "theyear" int (4) et je veux partitionner BY RANGE de 2016 à 2050, parce que la plupart des requêtes utilisent une instruction WHERE ayant une année à la fois. En procédant au partitionnement, j'obtiens une erreur disant que la clé "theyear" doit être avec la PRIMARY KEY, donc j'ai édité la clé primaire en faisant une clé multicolonne PRIMARY (id, theyear).Partitionnement MySQL - Erreur par clé primaire et enregistrements uniques
C'est OK, mais mes colonnes « id » est pas UNIQUE plus, car il contrôle colonnes « theyear » aussi ... Donc, si j'insérer:
INSERT INTO table (id, theyear) VALUES (1, 2016);
INSERT INTO table (id, theyear) VALUES (1, 2017);
il dit pas d'erreur, parce que la vérification UNIQUE à la fois id et theyear.
Comment implémenter le partitionnement sans perdre UNIQUE sur la colonne "id"?
Merci.
Avez-vous essayé d'ajouter une contrainte 'unique' distincte par rapport à l'année? – cwallenpoole
Je me base sur la documentation: https://dev.mysql.com/doc/refman/5.7/fr/partitioning-range.html, mais il me semble que vous n'avez pas besoin de changer votre clé primaire pour une partition RANGE. Tous les exemples qu'ils utilisent n'ont pas de clé primaire. Est-ce que je manque quelque chose? Essayez-vous de partitionner par KEY() par erreur? –
Pourquoi voulez-vous partitionner? À votre avis, quelle requête sera la plus rapide? Veuillez fournir cette requête et 'SHOW CREATE TABLE'. Je vais probablement faire valoir qu'un index approprié sera aussi rapide ou plus rapide que le partitionnement. Peut-être que l'indice commencerait avec YEAR. Astuce: http://mysql.rjweb.org/doc.php/partitionmaint –