Pages : 1
#1 Le 07/07/2007, à 15:06
- Bzh
MySql + jointure sur varchar 255
Bonjour,
J'ai besoin de créer une jointure sur un champ en varchar 255 d'une table.
Le souci c'est qu'il est déconseillé de créer une clause sur un varchar car il y a une grosse perte de vitesse.
Je voudrais donc générer un entier à partir d'une chaine de caractères. Les fonctions existantes de hachages ne génèrent pas de simple entier mais des chaines de caratères (hexadécimal ).
Il y a t'il une solution PROPRE afin de générer ce fameu entier ?
Dernière modification par Bzh (Le 07/07/2007, à 17:39)
Hors ligne
#2 Le 07/07/2007, à 16:29
- pouchat
Re : MySql + jointure sur varchar 255
bonjour,
il aurait fallu dès le départ intégrer un identifiant. Pour chaque table, il est toujours conseillé de mettre un champ (souvent le premier) "id" type INT avec auto_increment. Ca évite les problèmes et accélère forcément les jointures.
Refais correctement ta table avec ce nouvel id. Pour le remplissage, un petit script PHP (une simple boucle avec mise à jour de ce champ) fera parfaitement l'affaire pour générer les ID vides qu'il y a actuellement dans ta table. Par la suite dès que tu ajouteras une données, ce champs sera rempli automatique par MySQL...
Dernière modification par pouchat (Le 07/07/2007, à 16:31)
Hors ligne
#3 Le 07/07/2007, à 16:38
- Bzh
Re : MySql + jointure sur varchar 255
Non non !
J'ai l'habitude de créer des tables avec id auto-increment en index ( clé primaire )
Ce n'est pas ça le souci ! Le souci c'est que je ne veux pas créer une nouvelle table pour gérer 50 enregistrements !
Il s'agit de gérer un ensemble de news classées par catégories avec un grand max de 20 catégories ! ( je compte 50 comme marge de sécu )
Hors ligne
#4 Le 07/07/2007, à 16:42
- stephG
Re : MySql + jointure sur varchar 255
Salut
Peux-tu indiquer comment sont tes tables ?
Pour les catégories, l'idéal est d'avoir une table des catégories avec un id unique,
comme te l'indique pouchat.
Ubuntu, c'est trop bien ...
Hors ligne
#5 Le 07/07/2007, à 16:48
- pouchat
Re : MySql + jointure sur varchar 255
oui je vois pas le problème ?
il faut que tu crées forcément une table pour gérer tes cats. C'est le plus propre
Hors ligne
#6 Le 07/07/2007, à 17:36
- Bzh
Re : MySql + jointure sur varchar 255
Est-il vraiment interressant d'avoir une table pour 20 enregistrements ?
Il s'agit d'une site pour une petite pme !
J'aime simplifié au maximum !
donc voila ma table news :
______________________________________
id | titre | categorie | id_categorie | texte | date
Grace a "id_categorie" qui est un int les requetes de type :
SELECT titre FROM news WHERE id_categorie=2568485
sont beaucoup plus rapide que
SELECT titre FROM news WHERE categorie="Catégorie nouveauté"
Tout en évitant une table suplémentaire avec jointure !
ps:Mince plus haut je voulais parler de clause et non pas de jointures
Hors ligne
#7 Le 08/07/2007, à 00:50
- pouchat
Re : MySql + jointure sur varchar 255
oulah. Comme ça tu vas droit dans le mur.
1. D'abord, le premier objectif dans tout développement est la qualité du code, efficacité et souplesse (surtout pour une boîte)
ici plusieurs problèmes :
- c'est brouillon et beaucoup moins compréhensible que 2 tables séparées. surtout sur un schémas type MLD. (moins facile à comprendre par la suite pour les autres développeurs)
- beaucoup moins souple : ca veut dire que si tu dois mettre à jour une catégorie (faute de frappe, complétion...) faudra le faire pour chaque tuple concerné. Très lourd.
- de plus mettre 2 champs ID sur chaque tuple n'a plus d'intérêt. Dans ce cas pour obtenir la liste des cats il te faudrait simplement faire un SELECT GROUP BY categorie.
...
100000. Seulement une fois que tout marche on s'occupe des optimisations.
- donc niveau rapidité on utilisera plutôt un caching au niveau des requêtes sur le serveur SQL ou directement sur les pages au niveau HTML
- si c'est un site pour une PME on peut estimer que le nombre de d'accès lecture sera limité et ne va donc pas faire tomber ton serveur SQL.
- si c'est un gestionnaire de news, la quantité d'informations (news ou catégorie) sera plutôt limitée ( < 1.000). A ce niveau là encore, faire une simple jointure entre 2 tables très légères sera aussi rapide que ton système à une seule table.
Il vaut mieux apprendre à bien concevoir son appli dès le départ. Ca te servira sur des projets plus conséquents...
Dernière modification par pouchat (Le 08/07/2007, à 00:53)
Hors ligne