Envoyé par
CinePhil
Un index sur un VARCHAR est pertinent si des recherche sur cette colonnes sont faites régulièrement.
Que sont ces trois colonnes ?
Pourquoi 2 d'entre elles sont des varchars ?
Ce sera le cas. La table contient deux clés k et k' hexadecimales de 32 digits de long (donc c'est vrai que je pourrais (devrais?) passer en CHAR(32) directement, mais soit) qui identifient de facon unique un compte (3eme colonne).
L'allure de ma table serait le suivant :
create table matable ( key_1 varchar(32), key_2 varchar(32), id_account integer , position integer );
Où ici id_account est une FK vers une autre table (la table des account donc).
Le traitement que j'ai a faire consiste a recuperer l'entier 'position' pour le triple (key_1,key_2,id_account) :
SELECT position from matable where key_1='XXXXX' and key_2='YYYYYY' and id_account=ZZZ;
Ta question laisse supposer que tu as des clés primaires, potentiellement clés étrangères dans d'autres tables, qui sont de type VARCHAR. Ca effectivement, ce n'est pas optimum pour plusieurs raisons déjà évoquées maintes fois sur ces forums.
Un identifiant sera de préférence de type entier non nul, non signé et auto incrémenté.
En Postgresql, utiliser le pseudo type serial qui crée une séquence associée à la table.
Par chance non. Et je ne me vois pas créer une table de clés avec une clé primaire auto-incrémentée servant de clé étrangère a ma table matable. Si ?
Ceci etant je vais essayer de me retrouver ces threads malgré tout car je pense y être confronté bientot (par exemple chercher une adresse email contenue dans une commande, dans la table des comptes d'utilisateurs)...
Merci pour ces tuyaux !
Partager