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 :

Index UNIQUE et longueur de clé


Sujet :

Requêtes MySQL

  1. #1
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut Index UNIQUE et longueur de clé
    Bonjour,

    Je me pose une question sur les index de type UNIQUE.
    Ma servant habituellement à éviter tout doublon dans certaines de mes tables, la longueur de la clé appliquée à certains champs attire mon attention.

    Imaginons une table (codage en UTF8_général_ci) possédant un champ de type VARCHAR (500). Même si la longueur n'importe normalement plus dans VARCHAR, je prévois d'y stocker des chaines de longueur comprises entre 450 et 500 caractères (soit 1000 o max en UTF8).
    Il parait logique d'appliquer la longueur de clé correspondant à ce champ de 500 caractères.

    SQL bloque une 1ere fois et pour cause : longueur maximale de 767 o soit 383 caractères UTF8.
    Abaissons donc la longueur de la clé à 380 caractères.

    Ca ne correspond plus à mon cas puisque mes chaines vont faire entre 450 et 500 caractères.

    J'ai fais le test et m'aperçoit qu'au moment d'utiliser INSERT avec des chaines proches (différences sur les derniers caractères), MySQL affirme trouver un doublon alors qu'il n'en est rien.

    Quelle est la logique derrière cette limitation à 767 octets des longueur de clé? Peut-on passer outre?

    Merci pour vos réponses.

  2. #2
    Membre expert
    Avatar de ericd69
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2011
    Messages
    1 919
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 919
    Points : 3 295
    Points
    3 295
    Billets dans le blog
    1
    Par défaut
    c'est normal, il y a une limite d'indexation pour les textes (hors fulltext on s'entend bien)

    il y a un paramètre dans mysql qui définit le réglage de cette limite (en général de l'ordre de 1024o)

    donc forcément si les n premiers octets (selon le réglage) sont les mêmes il considère que c'est un doublon...

    et c'est fait pour une question de taille et performance... les index texte c'est le mal (niveau performance) !!

    tu devrais lire la doc sur les variables serveur pour max_sort_length et max_length_for_sort_data
    soyons pensez à mettre quand votre problème est résolu ou à utiliser pour les réponses pertinentes...
    ne posez pas de problématique soi-disant simplifiée sur des problèmes que vous n'êtes pas capable de résoudre par respect pour ceux qui planchent dessus... sinon: et à utiliser pour insérer votre code...

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    1) MySQL est le plus limité des SGBDR en matière d'indexation, là ou la limite est de 800 à 1000 caractères dans un index MySQL ne dépasse effectivement pas les 266 octets (soit 800 divisé par 3 du fait de l'encodage o combien débile de l'YTF8)
    2) à partir de ce moment, MySQL tronque les données, mais sans le dire (une maladie générale de MySQL est de faire des erreurs silencieuse!!!) ni à quel offset.... et trouve donc des doublons

    A lire sur les méfaits de MyySQL : http://blog.developpez.com/sqlpro/p9...udre-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/ * * * * *

  4. #4
    Membre régulier
    Profil pro
    Étudiant
    Inscrit en
    Janvier 2008
    Messages
    253
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2008
    Messages : 253
    Points : 84
    Points
    84
    Par défaut
    Bonjour,

    Merci à vous deux pour vos réponses.

    Ericd69, en effet c'était bien cela, le problème de base a été solutionné.

    SQLPro, ce constat n'est pas négligeable.
    Cependant je suis vraiment perplexe par rapport à ça. Il ne faut pas confondre manque réel de fonctionnalités par rapport aux concurrents et manque fonctionnel par rapport au besoin de l'utilisateur.
    MySQL répond à +90% de mes besoins actuellement, comme beaucoup d'autres certainement.
    Peut-être que cela vient-il d'un manque d'ouverture et que l'on a tendance à concevoir les couches 2 en fonction de ce que MySQL ne fait pas pour pouvoir continuer à l'utiliser (ce qui n'est pas très bien objectivement).
    Peut-être aussi que certaines choses n'ont pas été implémentées pour conserver une efficacité sur les trucs basiques.

    Je prévoyais de toute façon de migrer une partie de ma base, la plus chargée en relations et en choses exotiques, vers PostgreSQL.
    Non pas pour les manques de MySQL mais parce que Pg propose un bon moteur spatial.

  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 763
    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 763
    Points : 52 554
    Points
    52 554
    Billets dans le blog
    5
    Par défaut
    Entre nous le SIG de MySQL c'est la pire merde que j'ai vu dans ma vie.Allez voir le bug que j'avais mentionné sur le SIG qui voyait un point dans un trinagle alors qu'il était à l'extérieur !!!! ici et vous m'en direz des nouvelles.

    C'est plus qu'une honte !

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

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

Discussions similaires

  1. Connaitre l'index unique déclenché
    Par Hobbi1 dans le forum Oracle
    Réponses: 4
    Dernier message: 17/11/2006, 15h50
  2. Réponses: 3
    Dernier message: 02/05/2006, 21h36
  3. Réponses: 7
    Dernier message: 27/04/2006, 10h21
  4. Sql Server Express - Probleme index unique et valeurs null
    Par Fayoul dans le forum MS SQL Server
    Réponses: 6
    Dernier message: 17/02/2006, 17h22
  5. [IMP/EXP] Probleme d'index unique
    Par rours dans le forum Oracle
    Réponses: 17
    Dernier message: 18/05/2005, 15h37

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