Précédent   Forum des professionnels en informatique > Bases de données > PostgreSQL
PostgreSQL Forum PostgreSQL. Avant de poster -> F.A.Q PostGreSQL Tutoriels PostGreSQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 17/07/2007, 19h47   #1
Invité de passage
 
Inscription : février 2007
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 21
Points : 2
Points : 2
Par défaut Performance entre LIKE ou =

Bonjour,

J'ai une requête qui fait une comparaison entre 2 tables. Le WHERE contient une simple vérification entre deux champs character varying(6) NOT NULL. Lorsque je fais ma comparaison avec LIKE entre ces deux champs, la query prends 15 secondes. Lorsque je fais cette même query avec un = cela prend 200 ms.

J'aimerais savoir pourquoi?
superdaok84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/07/2007, 22h42   #2
Membre extrêmement actif
 
Avatar de kedare
 
Mathieu
Administrateur systèmes et réseaux
Inscription : juillet 2005
Messages : 1 476
Détails du profil
Informations personnelles :
Nom : Mathieu
Localisation : France

Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : juillet 2005
Messages : 1 476
Points : 1 260
Points : 1 260
il me semble que like utilise des index alors que = non , mais je suis pas sure
kedare est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2007, 07h48   #3
Expert Confirmé
 
Homme
Inscription : septembre 2006
Messages : 2 293
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : septembre 2006
Messages : 2 293
Points : 2 741
Points : 2 741
Citation:
Envoyé par kedare
il me semble que like utilise des index alors que = non , mais je suis pas sure
c'est effectivement exactement le contraire...
JeitEmgie est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2007, 10h03   #4
Membre régulier
 
Inscription : juin 2004
Messages : 52
Détails du profil
Informations forums :
Inscription : juin 2004
Messages : 52
Points : 80
Points : 80
Envoyer un message via ICQ à Shepard Envoyer un message via MSN à Shepard
A mon humble avis, les 2 utilisent des index, pourvu qu'on utilise l'étoile à la fin avec LIKE ( '*blabla' n'utilisera par d'index, enfin du moins pas l'index "normal" )

Pour utiliser l'étoile au début, utiliser la technique de mettre un index sur REVERSE(champ) ( avec REVERSE une fonction qui inverse l'ordre des caractères ) puis utiliser LIKE sur ce même REVERSE me semble être un bon parti :p
Shepard est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/07/2007, 14h44   #5
Membre habitué
 
Avatar de Davboc
 
Inscription : novembre 2005
Messages : 266
Détails du profil
Informations personnelles :
Âge : 28
Localisation : France, Ille et Vilaine (Bretagne)

Informations forums :
Inscription : novembre 2005
Messages : 266
Points : 139
Points : 139
C'est exactement ce dont on parlait hier au boulot et on en a tiré les mêmes conclusions que Shepard ^^
Davboc est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/07/2007, 10h07   #6
Membre habitué
 
Avatar de cysboy
 
Développeur informatique
Inscription : août 2006
Messages : 221
Détails du profil
Informations personnelles :
Âge : 32
Localisation : France

Informations professionnelles :
Activité : Développeur informatique

Informations forums :
Inscription : août 2006
Messages : 221
Points : 129
Points : 129
LIKE, ILIKE ou encore ~ ne font pas des test en expression régulière ?
Du coup ils seraient tout de même un peu plus lent que l'égalité brut.
Enfin j'suis pas sûr à 100% non plus....
cysboy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/07/2007, 21h09   #7
Invité de passage
 
Inscription : février 2007
Messages : 21
Détails du profil
Informations forums :
Inscription : février 2007
Messages : 21
Points : 2
Points : 2
Citation:
Envoyé par Shepard
A mon humble avis, les 2 utilisent des index, pourvu qu'on utilise l'étoile à la fin avec LIKE ( '*blabla' n'utilisera par d'index, enfin du moins pas l'index "normal" )

Pour utiliser l'étoile au début, utiliser la technique de mettre un index sur REVERSE(champ) ( avec REVERSE une fonction qui inverse l'ordre des caractères ) puis utiliser LIKE sur ce même REVERSE me semble être un bon parti :p
Merci à toi et merci à tous qui ont pris le temps de lire et d'écrire.
superdaok84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h32.


 
 
 
 
Partenaires

Hébergement Web