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 :

MySQL limité à 16 index par table


Sujet :

Administration MySQL

  1. #1
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 405
    Points : 868
    Points
    868
    Par défaut MySQL limité à 16 index par table
    bonjour,

    j'ai une table avec plus de 40 champs dont 24 ayant besoin d'un index.
    Au moment de la création, j'ai une erreur francisée qui dit :

    #1070 - Trop de parties specifiées dans la clef. Maximum de 16 parties

    je suppose que c'est l'erreur anglaise : too many key parts specified max 16 parts allowed

    est-ce que ce 16 est modifiable ?
    Ma version de mysql est 5.7.42-log (sur un hébergement mutualisé)


    Merci de votre conseil et lecture.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 153
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 153
    Points : 8 328
    Points
    8 328
    Billets dans le blog
    17
    Par défaut
    Tu veux créer 1 index contenant plus de 16 colonnes.

    A maximum of 16 columns is permitted for multicolumn indexes. Exceeding the limit returns an error.

    ERROR 1070 (42000): Too many key parts specified; max 16 parts allowed
    https://dev.mysql.com/doc/refman/5.7...db-limits.html
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 405
    Points : 868
    Points
    868
    Par défaut
    bonjour,

    j'ai fait une erreur de manipulation.

    J'utilise phpmyadmin, je me suis rendu compte que cocher plusieurs colonnes et utiliser l'option "index" en bas de la liste des champs, ne permettait pas de créer un index pour chacune des colonnes mais un index de colonnes fusionnées

    en gros, au lieu de générer ça quand on coche les colonne 1 2 et 3:

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ALTER TABLE `personnes` ADD INDEX(`creneau01`); 
    ALTER TABLE `personnes` ADD INDEX(`creneau02`); 
    ALTER TABLE `personnes` ADD INDEX(`creneau03`);

    il générait ceci :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ALTER TABLE `personnes` ADD INDEX( `creneau01`, `creneau02`,`creneau03` );

    ce qui n'est pas du tout la même chose ! ça m'apprendra à être fénéant et utiliser les outils IHM plutôt que les lignes de commandes !
    Je passe en résolu!

    même si je viens de découvrir qu'il existe aussi une limite de 64 champs indéxés par table !!
    #1069 - Trop de clefs sont définies. Maximum de 64 clefs alloué

    Conclusion : on peut pas utiliser une seule table pour gérer une matrice 3d de 24 champs !!

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 153
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 153
    Points : 8 328
    Points
    8 328
    Billets dans le blog
    17
    Par défaut
    Conclusion : on peut pas utiliser une seule table pour gérer une matrice 3d de 24 champs !!
    Cela dépend sûrement de ta modélisation
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  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 806
    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 806
    Points : 52 856
    Points
    52 856
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par clavier12AZQSWX Voir le message
    Conclusion : on peut pas utiliser une seule table pour gérer une matrice 3d de 24 champs !!
    Une matrice 3 D c'est du spatial. Le problème de MySQmerde c'est qu'il ne ait pas gérer le spatial à 3 dimenion. Même avec 2 dim il donne déjà des résultats faux.

    Dans une cartouche SIG tu peut créer des nuages de points à 3 dimensions : X, Y et Z.... Voir mon cours sur le spatial. Mais les seuls SGBDR qui avent faire ça c'est Oracle, MS SQL Server PG ne gère pas le Y...

    Exemple MS SQL Server :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DECLARE @POINTS GEOMETRY = CAST('MULTIPOINT ((25 12 3), (35 11 6))' AS GEOMETRY)
    A me lire : https://blog.developpez.com/sqlpro/p...on_geographiqu

    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/ * * * * *

  6. #6
    Expert éminent sénior Avatar de Artemus24
    Homme Profil pro
    Agent secret au service du président Ulysses S. Grant !
    Inscrit en
    Février 2011
    Messages
    6 388
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Agent secret au service du président Ulysses S. Grant !
    Secteur : Finance

    Informations forums :
    Inscription : Février 2011
    Messages : 6 388
    Points : 19 118
    Points
    19 118
    Par défaut
    Salut à tous.

    j'ai une table avec plus de 40 champs dont 24 ayant besoin d'un index.
    Les habitudes ont la vie dure. Il ne s'agit pas de champs mais de colonnes.
    Pourquoi autant d'index pour une table contenant 40 colonnes ?
    Si vous êtes de mon aide, vous pouvez cliquer sur .
    Mon site : http://www.jcz.fr

  7. #7
    Membre éclairé
    Avatar de clavier12AZQSWX
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Avril 2009
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 405
    Points : 868
    Points
    868
    Par défaut
    Citation Envoyé par Artemus24 Voir le message
    Salut à tous.


    Les habitudes ont la vie dure. Il ne s'agit pas de champs mais de colonnes.
    Pourquoi autant d'index pour une table contenant 40 colonnes ?
    une table qui gère des "produits" à plus de 24 propriétés sélectionnables (donc 24 tables étrangères différentes liées).
    Dans un vieux poste, avant la création du schéma, je m'étais demandé s'il fallait créer une table catégorie "fourtout" où des valeurs numériques serait mélangées à des valeurs AN, pour simplifier le modèle relationnel.
    Contre mon envie personnelle, j'ai donc opté pour la solution de rester "sémantique" et pas aller dans la bidouille. Même si je me suis rapproché du "keep it simple", je reste convaincu que la solution foure-tout aurait été la meilleure...

    Le cas d'étude est simple : comment formaliser un produit à 40 propriétés.
    -1 : Une seule table maitre et 40 tables étrangères pour chacune des propriétés
    - 2 : une table maitre et une table "typologie (id,lib,valeur,typologie) et une table-relation appartenance pour faire le lien.
    Le fait de mélanger dans une seule table des données métrique,date,AN était déconseillée....

    C'est la même question qu'à du se poser l'ingénieur date de site amazon : un table avec chaque type de propriété ou une seule table propriété où l'on mélangerait des données de vêtements avec des données alimentaires avec des données techniques...

  8. #8
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 179
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 179
    Points : 39 039
    Points
    39 039
    Billets dans le blog
    9
    Par défaut
    Pour ce qui concerne les recherches, hors considérations d'index couvrant donc, un index n'est pertinent que s'il est discriminant.
    Par exemple, créer un index sur le code sexe d'une table des personnes physiques ne présente aucun intérêt concernant les recherches puisque grosso-modo, chaque valeur représentera 50% de l'effectif de la table.

    Donc, avant de créer un index pour chaque colonne (et non pas "champ") de la table, vérifiez combien de valeurs distinctes chaque colonne peut prendre et quels sont les besoins de recherche sur chaque colonne.

    Il ne faut pas oublier que chaque index impose une mise à jour supplémentaire lors des UPDATE, INSERT et DELETE, puisqu'il faut maintenir non seulement la page DATA et la page de l'index PK, mais aussi tous les autres index.
    Evidement, les servitudes (réorgs, sauvegardes...) sont également pénalisées par la pléthore d'index, ainsi que l'espace disque.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 8
    Dernier message: 07/06/2017, 18h32
  2. Limiter un nombre de table par bases
    Par ApocKalipsS dans le forum Administration
    Réponses: 1
    Dernier message: 01/08/2011, 19h34
  3. Liste des index par tables
    Par Labienus dans le forum Administration
    Réponses: 3
    Dernier message: 20/07/2010, 11h12
  4. recherche sur table mysql avec deux index
    Par Invité1 dans le forum Bases de données
    Réponses: 3
    Dernier message: 20/05/2010, 11h41
  5. [Sybase] Utilisation indexes sur table Proxy
    Par MashiMaro dans le forum Sybase
    Réponses: 2
    Dernier message: 20/02/2004, 10h20

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