IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

conversion table myisam => innodb


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut conversion table myisam => innodb
    Bonjour,

    j'ai une table de 10 Giga à convertir du format myisam au format innodb.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    CREATE TABLE IF NOT EXISTS `images` (
      `img_id` smallint(4) unsigned NOT NULL AUTO_INCREMENT,
      `user_id` int(8) unsigned NOT NULL DEFAULT '0',
      PRIMARY KEY (`user_id`,`img_id`)
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
    Seul soucis la clé primaire en place qui a le comportement suivant :

    img_id = 1
    user_id = 1

    img_id = 2
    user_id = 1
    -
    img_id = 1
    user_id = 2

    img_id = 2
    user_id = 2
    -

    img_id = 1
    user_id = 3

    img_id = 2
    user_id = 3


    Comment puis-je reproduire le même comportement sous Innodb ?

    Merci

  2. #2
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    Hello,

    je crois avoir trouver une solution avec les triggers pour reproduire ce comportement sous innodb.

    en créeant une table servant à compter notamment que j'ai appeller "img" dans mon exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    drop table if exists img;
    create table img
    (
    user_id int(8) unsigned not null auto_increment primary key,
    next_table_id smallint(5) unsigned not null default 1
    )engine=innodb;
     
    drop table if exists images;
    create table images
    (
    img_id smallint(5) unsigned not null,
    user_id int(8) unsigned not null default 0,
    primary key (user_id, img_id) -- composite clustered index
    )engine=innodb;
     
    delimiter #
     
    create trigger images_before_ins_trig before insert on images
    for each row
    begin
    declare v_id int unsigned default 1;
     
      select next_table_id + 1 into v_id from img where user_id = new.user_id;
      set new.img_id = v_id;
      replace into img (user_id, next_table_id) VALUES (new.user_id, v_id);
    end
     
    delimiter ;
     
    insert into images (user_id) values (100001),(100001),(100002),(100002);

  3. #3
    Membre confirmé

    Profil pro
    Inscrit en
    Juin 2004
    Messages
    161
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 161
    Par défaut
    pour les curieux, encore plus simple sans besoin de tables supplémentaire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TRIGGER `images_before_ins_trig` BEFORE INSERT ON `images`
     FOR EACH ROW begin
    declare maxid int;
    select COALESCE(NULLIF(max(img_id), ''),0) into maxid from images where user_id = new.user_id;    
    set new.img_id = maxid +1;
    end

Discussions similaires

  1. pour les grosses tables, vaut-il mieux myisam ou innodb ?
    Par clavier12AZQSWX dans le forum MySQL
    Réponses: 1
    Dernier message: 27/04/2010, 13h54
  2. Jointure table MyISAM <-> table InnoDB
    Par langevert dans le forum Débuter
    Réponses: 3
    Dernier message: 24/11/2008, 14h36
  3. choix type de table: myisam ou innodb?
    Par rif15 dans le forum Administration
    Réponses: 2
    Dernier message: 02/11/2008, 13h34
  4. Table MyISAM ou InnoDB
    Par gforce dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 04/01/2007, 12h37
  5. c koi l'interet d'utiliser les tables Myisam
    Par emchakes dans le forum Débuter
    Réponses: 4
    Dernier message: 02/12/2005, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo