Précédent   Forum des professionnels en informatique > Bases de données > Oracle > SQL
SQL Forum d'entraide sur le SQL pour Oracle
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 05/12/2011, 10h36   #1
Membre à l'essai
 
Inscription : mai 2006
Messages : 89
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 89
Points : 23
Points : 23
Par défaut Performance select distinct sur requête simple

Bonjour,

J'ai un problème avec la requête suivante :
Code :
1
2
 
SELECT DISTINCT(year) FROM selling WHERE type IN ('A', 'C') AND country LIKE ('%FR%');
Le résultat est retournée après 30s (4 lignes).
Un select * est instantané.
La table contient 1,2 millions de lignes.

J'ai fait un explain mais le résultat me parle pas vraiment:
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
 
Plan hash value: 188663770
 
-----------------------------------------------------------------------------------
| Id  | Operation          | Name         | Rows  | Bytes | Cost (%CPU)| Time     |
-----------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |              |     5 |    90 | 68344   (1)| 00:13:41 |
|   1 |  HASH UNIQUE       |              |     5 |    90 | 68344   (1)| 00:13:41 |
|*  2 |   TABLE ACCESS FULL| SELLING|  1252 | 22536 | 68343   (1)| 00:13:41 |
-----------------------------------------------------------------------------------
 
Predicate Information (IDENTIFIED BY operation id):
---------------------------------------------------
 
   2 - filter("COUNTRY" IS NOT NULL AND "COUNTRY" LIKE 
              '%FR%' AND ("TYPE"='A' OR "TYPE"='C'))
Si quelqu'un a une piste....
lapin_hobbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h01   #2
Membre Expert
 
Inscription : août 2009
Messages : 779
Détails du profil
Informations forums :
Inscription : août 2009
Messages : 779
Points : 1 098
Points : 1 098
Citation:
Envoyé par lapin_hobbit Voir le message
Un select * est instantané.
Bonjour,
l'instantanéité du "select *" est due uniquement au fait qu'il ne ramène que les 1ères lignes ... s'il devait tout ramener, il passerait à peu près le même temps !

Ensuite, "une piste", ça serait pour optimiser le temps de réponse ?
Vu qu'il y a un LIKE '%quelquechose%', c'est difficile. Les '%' sont-ils vraiment indispensables ? Parce que dans une colonne "country", je m'attend à avoir "FR", pas "xxxFRyyyy". En retirant les % (au moins le 1er) - en fait, idéalement, en passant à une égalité -, si la colonne est indexée ET que l'utilisation de l'index est intéressante (à savoir, ça filtre suffisament), il y aura gain de temps.

EDIT : sur le temps passé, il y a quand même aussi le temps de faire le distinct, ce qui peut ne pas être négligeable.
Rei Ichido est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h22   #3
Membre à l'essai
 
Inscription : mai 2006
Messages : 89
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 89
Points : 23
Points : 23
Merci pour la réponse...

Oui effectivement, je recherche une piste pour améliorer le temps de réponse de cette requête.

Supprimer les %% n'est pas possible dans ce cas.
En revanche j'ai vérifié et constaté l'absence d'index sur les champs country et type.
Avec un index j'obtiens des performances raisonnables.

Merci pour la piste
lapin_hobbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h32   #4
Expert Confirmé
 
Homme
Inscription : mai 2002
Messages : 1 649
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 29
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : mai 2002
Messages : 1 649
Points : 2 647
Points : 2 647
Bonjour,

votre index sur country ne sera pas utilisé si vous faites un like '%valeur%'
punkoff est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/12/2011, 11h38   #5
Membre à l'essai
 
Inscription : mai 2006
Messages : 89
Détails du profil
Informations forums :
Inscription : mai 2006
Messages : 89
Points : 23
Points : 23
merci pour l'information.

L'index sur type allège donc suffisament la recherche.
lapin_hobbit est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h22.


 
 
 
 
Partenaires

Hébergement Web