afin de ficiliter le coté "user friendly" une partie de la base sur laquelle je bosse a des ID au format varchar, on me dit que cela n'entraine pas de perte de perf, est-ce vrai?
merci d'avance![]()
afin de ficiliter le coté "user friendly" une partie de la base sur laquelle je bosse a des ID au format varchar, on me dit que cela n'entraine pas de perte de perf, est-ce vrai?
merci d'avance![]()
Personnellement, je ne sais pas trop et je me suis toujours posé la question. En tout cas, j'ai souvent vu le conseil "utilisez des clés primaires numériques". Les rares fois où j'ai utilisé des clés primaires de type chaîne, c'était maximum 3 caractères. Pour des chaînes si petites, je pense que les performances ne sont pas dégradées par rapport à un INT.
Tu peux lire ce post sur le forum officiel de MySQL pour avoir un autre avis : http://forums.mysql.com/read.php?21,...6252#msg-36252
merci
edit : j'ai encore une question :
et si je garde ce champ, que je rajoute un clef de type int.
=> si je fait des requetes SELECT basée sur mon vieux champ (varchar), mais avec des liens sur d'autres tables basée sur le INT.
=> aurais-je une perte de perf significative par rapport au "tout INT"
ex :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 SELECT blabla FROM T1, T2 WHERE idNumT1 = idNumT2 AND idVarChar = 'toto'
désolé, je repose la question en ajoutant cette données :
les requetes full text accelerent elles les requetes basées sur des index varchar?
nous n'en sommes pas certains, mais, dans le doute...![]()
Pour la question de la clé numérique ou varchar je te conseille de lire ceci : http://sqlpro.developpez.com/cours/m...ge=base#L2.5.1
Un système hybride chaine/numérique ne grèvera pas énormément les performances mais il sera surtout beaucoup moins pratique à utiliser et maintenir (requêtes alambiquées, nécessité de vérifier en permanence la cohérence entre les 2 clés...)
Quant aux requêtes FULLTEXT, elles utilisent un type d'indexation bien particulier. Un index classique, de par sa nature, ne permet que de chercher sur la partie gauche des valeurs. Ce qui veut dire qu'une requête comme "SELECT * FROM latable WHERE col1 LIKE '%toto'" n'utilisera pas d'index, contrairement à "SELECT * FROM latable WHERE col1 LIKE 'toto%'".
En revanche, avec un index FULLTEXT on peut faire efficacement une recherche sur un mot situé en plein milieu d'une chaine, par exemple. Une telle indexation est bien plus adaptée aux problématiques du style moteur de recherche.
Partager