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 :

Que penser de la longeur de cette table ? Peut-on l'améliorer ?


Sujet :

Requêtes MySQL

  1. #1
    Membre confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut Que penser de la longeur de cette table ? Peut-on l'améliorer ?
    Bonjour,

    je tende de développer un logiciel pour un lms,je prend comme exemple moodle, ce lms à plein de fonctionnalités mais je trouve que derrière il a plein de défaut
    (notament ralentissement), le lms garde ses couches de code depuis sa conception (1999) et essayer de se rectifié en profondeur (il contient plus de 350 tables).

    je vous montre sa table user:

    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
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
     
    CREATE TABLE IF NOT EXISTS `mdl_user` (
    `id` bigint(10) NOT NULL,
      `auth` varchar(20) NOT NULL DEFAULT 'manual',
      `confirmed` tinyint(1) NOT NULL DEFAULT '0',
      `policyagreed` tinyint(1) NOT NULL DEFAULT '0',
      `deleted` tinyint(1) NOT NULL DEFAULT '0',
      `suspended` tinyint(1) NOT NULL DEFAULT '0',
      `mnethostid` bigint(10) NOT NULL DEFAULT '0',
      `username` varchar(100) NOT NULL DEFAULT '',
      `password` varchar(255) NOT NULL DEFAULT '',
      `idnumber` varchar(255) NOT NULL DEFAULT '',
      `firstname` varchar(100) NOT NULL DEFAULT '',
      `lastname` varchar(100) NOT NULL DEFAULT '',
      `email` varchar(100) NOT NULL DEFAULT '',
      `emailstop` tinyint(1) NOT NULL DEFAULT '0',
      `icq` varchar(15) NOT NULL DEFAULT '',
      `skype` varchar(50) NOT NULL DEFAULT '',
      `yahoo` varchar(50) NOT NULL DEFAULT '',
      `aim` varchar(50) NOT NULL DEFAULT '',
      `msn` varchar(50) NOT NULL DEFAULT '',
      `phone1` varchar(20) NOT NULL DEFAULT '',
      `phone2` varchar(20) NOT NULL DEFAULT '',
      `institution` varchar(255) NOT NULL DEFAULT '',
      `department` varchar(255) NOT NULL DEFAULT '',
      `address` varchar(255) NOT NULL DEFAULT '',
      `city` varchar(120) NOT NULL DEFAULT '',
      `country` varchar(2) NOT NULL DEFAULT '',
      `lang` varchar(30) NOT NULL DEFAULT 'en',
      `calendartype` varchar(30) NOT NULL DEFAULT 'gregorian',
      `theme` varchar(50) NOT NULL DEFAULT '',
      `timezone` varchar(100) NOT NULL DEFAULT '99',
      `firstaccess` bigint(10) NOT NULL DEFAULT '0',
      `lastaccess` bigint(10) NOT NULL DEFAULT '0',
      `lastlogin` bigint(10) NOT NULL DEFAULT '0',
      `currentlogin` bigint(10) NOT NULL DEFAULT '0',
      `lastip` varchar(45) NOT NULL DEFAULT '',
      `secret` varchar(15) NOT NULL DEFAULT '',
      `picture` bigint(10) NOT NULL DEFAULT '0',
      `url` varchar(255) NOT NULL DEFAULT '',
      `description` longtext,
      `descriptionformat` tinyint(2) NOT NULL DEFAULT '1',
      `mailformat` tinyint(1) NOT NULL DEFAULT '1',
      `maildigest` tinyint(1) NOT NULL DEFAULT '0',
      `maildisplay` tinyint(2) NOT NULL DEFAULT '2',
      `autosubscribe` tinyint(1) NOT NULL DEFAULT '1',
      `trackforums` tinyint(1) NOT NULL DEFAULT '0',
      `timecreated` bigint(10) NOT NULL DEFAULT '0',
      `timemodified` bigint(10) NOT NULL DEFAULT '0',
      `trustbitmask` bigint(10) NOT NULL DEFAULT '0',
      `imagealt` varchar(255) DEFAULT NULL,
      `lastnamephonetic` varchar(255) DEFAULT NULL,
      `firstnamephonetic` varchar(255) DEFAULT NULL,
      `middlename` varchar(255) DEFAULT NULL,
      `alternatename` varchar(255) DEFAULT NULL
    ) ENGINE=InnoDB AUTO_INCREMENT=157 DEFAULT CHARSET=utf8 ROW_FORMAT=COMPRESSED COMMENT='One record for each person';
    qu'est ce que je pourrais améliorer pour gagner en performance de requête ? la couche logiciel est PHP + mysql (maintenant mariadb)
    j'avais l'intention de réimplémenter (pas tout mais seulement l'essentiel des fonctionnalité sinon il faudrait tout une vie ....) nodej (j'aimerais angular2 même s'il n'est pas encore sortie) + mariadb.
    et d'amélier les ponts faible,

    Il y a trop de colonnes?

    De plus j'ai trouvé qu'en base il y a du JSON voici un 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
     
    CREATE TABLE IF NOT EXISTS `mdl_course_modules` (
    `id` bigint(10) NOT NULL,
      `course` bigint(10) NOT NULL DEFAULT '0',
      `module` bigint(10) NOT NULL DEFAULT '0',
      `instance` bigint(10) NOT NULL DEFAULT '0',
      `section` bigint(10) NOT NULL DEFAULT '0',
      `idnumber` varchar(100) DEFAULT NULL,
      `added` bigint(10) NOT NULL DEFAULT '0',
      `score` smallint(4) NOT NULL DEFAULT '0',
      `indent` mediumint(5) NOT NULL DEFAULT '0',
      `visible` tinyint(1) NOT NULL DEFAULT '1',
      `visibleold` tinyint(1) NOT NULL DEFAULT '1',
      `groupmode` smallint(4) NOT NULL DEFAULT '0',
      `groupingid` bigint(10) NOT NULL DEFAULT '0',
      `completion` tinyint(1) NOT NULL DEFAULT '0',
      `completiongradeitemnumber` bigint(10) DEFAULT NULL,
      `completionview` tinyint(1) NOT NULL DEFAULT '0',
      `completionexpected` bigint(10) NOT NULL DEFAULT '0',
      `showdescription` tinyint(1) NOT NULL DEFAULT '0',
      `availability` longtext
    ) ENGINE=InnoDB AUTO_INCREMENT=574 DEFAULT CHARSET=utf8 COMMENT='course_modules table retrofitted from MySQL';
    (559, 110, 9, 91, 588, NULL, 1463046705, 0, 0, 1, 1, 0, 0, 0, NULL, 0, 0, 0, '{"op":"&","c":[{"type":"profile","sf":"lastname","op":"contains","v":"@xxx"}],"showc":[true]}'),


    Ce json permet de donner des permissions .
    Faut t'il scinder cette en plusieurs table ? je vois par exemple le username et le alternatename qui font peut être la même chose?
    Ce type de donnée est t'il adapté à ce besoin ?

    Pour les données en tables ce sont des timestamps, gagne t'on aussi en performance ou fonctionnalité (par exemple la couche de codage est plus simple ) à utiliser des vrais date j/m/a ?

    voici ce que je pensais si je scindai les tables:
    Nom : mcd1.jpg
Affichages : 92
Taille : 131,3 Ko


    Merci de vos suggestion

  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 772
    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 772
    Points : 52 737
    Points
    52 737
    Billets dans le blog
    5
    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 confirmé

    Profil pro
    Inscrit en
    Août 2008
    Messages
    1 191
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 1 191
    Points : 595
    Points
    595
    Par défaut
    merci de ta réponse,

    est t'il mauvais de remplacer le champ id en AI clé primaire,
    par un champs non AI et qu'il contient une clé en hash(il faudrait hash d'unique).

    celle clé permettrais de faire 2 choses

    -accéder à des fonctionnalités grace à cette clé si on est inscrit + vérifier que c'est bien le membre inscrit
    - testé un mot de passe avec un salt

    cela veut t'il le coup de le faire même si à la place d'un INT on a un varchar ou que c'est l'inverse cela va alourdir et freiner sa recherche?
    je pense notament que pour chercher un membre,il suffirait de faire un select sur son id en hash
    (nom plus son nom + prénom+adresse si il y a 2 membre ayant le même nom et prénom ....)
    Pour inhiber le membre il suffirait de changer son hash ,supprimer toutes les données qui contient ce hash.

Discussions similaires

  1. Réponses: 0
    Dernier message: 15/03/2012, 18h24
  2. [Checkstyle] Que penser de cet outil ?
    Par moila dans le forum Qualimétrie
    Réponses: 5
    Dernier message: 09/08/2010, 12h11
  3. no such table: carte alors que cette table existe
    Par Bubble724 dans le forum SQLite
    Réponses: 3
    Dernier message: 13/07/2007, 22h04
  4. Que penser de l'avenir de glut??
    Par xg dans le forum GLUT
    Réponses: 4
    Dernier message: 06/02/2004, 13h12

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