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

Administration MySQL Discussion :

large table (100M) & primary key


Sujet :

Administration MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Par défaut large table (100M) & primary key
    Bonjour,

    Je dois gérer une table d'historique de trois mois glissants de détails d'appels
    avec, à terme, 100 millions de lignes. Je partitionne la table sur la date d'appel afin de pourvoir travailler simplement par mois.

    J'ai aucun problème pour importer les 30M déjà en ma possession sans clé primaire mais par contre, dès que je crée la clé primaire dont j'ai besoin les performances à l'insert s'écroulent à partir de 10M de lignes et je ne peux quasiment plus insérer. Ca va poser un problème pour arriver à 100M!

    Je comprends bien le travail nécessaire pour gérer la clé primaire mais par contre, ca devrait quand même marcher non?!

    J'ai essayé avec innoDB et myisam avec les même résultats.

    Comment pourrais-je gérer ca?

    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
    31
    CREATE TABLE `network` (
      `id` varchar(50) NOT NULL DEFAULT '',
      `type` varchar(20) NOT NULL,
      `nature` smallint(6) NOT NULL,
      `sense` smallint(6) NOT NULL,
      `msisdn` varchar(20) NOT NULL,
      `msisdn_country` varchar(50) DEFAULT NULL,
      `msisdn_zone` varchar(5) DEFAULT NULL,
      `contact` varchar(50) DEFAULT '',
      `contact_country` varchar(50) DEFAULT NULL,
      `usage_date` datetime NOT NULL,
      `contact_zone` varchar(5) DEFAULT NULL,
      `volume` bigint(10) unsigned NOT NULL,
      `zoning` varchar(20) NOT NULL,
      `in_trunk` varchar(50) NOT NULL,
      `out_trunk` varchar(50) NOT NULL,
      `filename` varchar(100) NOT NULL
    ) ENGINE=MyISAM DEFAULT CHARSET=latin1
    /*!50100 PARTITION BY RANGE ( TO_DAYS(usage_date))
    (PARTITION rx201302 VALUES LESS THAN (735293) ENGINE = MyISAM,
     PARTITION rx201303 VALUES LESS THAN (735324) ENGINE = MyISAM,
     PARTITION rx201304 VALUES LESS THAN (735354) ENGINE = MyISAM,
     PARTITION rx201305 VALUES LESS THAN (735385) ENGINE = MyISAM,
     PARTITION rx201306 VALUES LESS THAN (735415) ENGINE = MyISAM,
     PARTITION rx201307 VALUES LESS THAN (735446) ENGINE = MyISAM,
     PARTITION rx201308 VALUES LESS THAN (735477) ENGINE = MyISAM,
     PARTITION rx201309 VALUES LESS THAN (735507) ENGINE = MyISAM,
     PARTITION rx201310 VALUES LESS THAN (735538) ENGINE = MyISAM,
     PARTITION rx201311 VALUES LESS THAN (735568) ENGINE = MyISAM,
     PARTITION rx201312 VALUES LESS THAN (735599) ENGINE = MyISAM,
     PARTITION rx2014 VALUES LESS THAN MAXVALUE ENGINE = MyISAM) */
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ALTER TABLE `network`
    	ADD INDEX `unique` (`msisdn`, `contact`, `type`, `usage_date`, `volume`);
    Merci

    Installation: Maria 5.5 64b

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    1) vous n'avez pas de clef primaire dans cette table
    2) id en varchar(50) c'est quoi ??? Vous mettez des nombre dans des littéraux ?
    3) pourquoi cet index unique ?

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  3. #3
    Membre averti
    Inscrit en
    Octobre 2008
    Messages
    47
    Détails du profil
    Informations forums :
    Inscription : Octobre 2008
    Messages : 47
    Par défaut
    1) vous n'avez pas de clef primaire dans cette table
    Non justement, c'est ce que je cherche à faire. Là c'est le create de la table qui fonctionne (sans clé primaire ou unique)

    2) id en varchar(50) c'est quoi ??? Vous mettez des nombre dans des littéraux ?
    C'est bien du texte. En fait c'est le MD5 de la concatenation des colonnes formant ma clé unique. J'ai essayé de contourner mon problème de perf par cette artifice (en utilisant cet unique champ plutot que les 5 champs précités) sans succès

    3) pourquoi cet index unique ?
    J'ai essayé de créer une clé primaire puis un index unique (les deux pourraient convenir) avec le meme résultat: perf cata.

    Merci

  4. #4
    Membre très actif
    Profil pro
    Administrateur
    Inscrit en
    Mai 2008
    Messages
    237
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Administrateur
    Secteur : Industrie

    Informations forums :
    Inscription : Mai 2008
    Messages : 237
    Par défaut
    1 - INSERT DELAYED INTO table ... pourrait aider
    2 - Peut-être faire des insertions multiples avec la commande INSERT DELAYED
    3 - Avec une clé unique aussi grande, la génération d'un index est long.

  5. #5
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 999
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 999
    Billets dans le blog
    6
    Par défaut
    1) créez une PK n'ayant qu'une seule colonne de type BIGINT en auto incrément.
    2) ajoutez une contrainte d'unicité sur les colonnes considérée.

    mais de toute façon comme MySQL ne supporte pas le parallélisme, ces requête mettrons beaucoup de temps à s'exécuter !

    A lire sur le merdique MySQL : http://blog.developpez.com/sqlpro/p9...oudre_aux_yeux

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Réponses: 8
    Dernier message: 16/11/2010, 16h07
  2. delete dans une table contenant des primary key
    Par bracket dans le forum Langage SQL
    Réponses: 2
    Dernier message: 28/11/2008, 17h41
  3. Creation de tables avec plusieurs primary key
    Par The eye dans le forum Oracle
    Réponses: 5
    Dernier message: 28/12/2007, 10h05
  4. LOAD DATA INFILE sur table avec AUTO_INCREMENT PRIMARY KEY ?
    Par ctobini dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 30/10/2007, 11h00
  5. Table sans primary key avec Hibernate
    Par zizou771 dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/02/2007, 15h58

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