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 19/01/2011, 14h25   #1
Nouveau Membre du Club
 
Avatar de H.ile
 
Architecte de système d'information
Inscription : janvier 2008
Messages : 107
Détails du profil
Informations personnelles :
Âge : 32
Localisation : Macao

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : janvier 2008
Messages : 107
Points : 37
Points : 37
Par défaut Oracle 10.2 : amélioration de perf : requête spatiale et ntile

Aloha

J'ai un explain plan pourrite sur cette requête :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
SELECT S.GID_D,
       S.GID_A,
       S.CLASS,
       S.NAME
       || NTILE (
             4)
          OVER (
             ORDER BY
                SDO_GEOM.SDO_DISTANCE (S.PARC_GEOMETRY,S.BASIAS_GEOMETRY, 1) DESC),
       S."TYPE",
       SDO_GEOM.SDO_DISTANCE (S.PARC_GEOMETRY,S.BASIAS_GEOMETRY,  1)
  FROM (SELECT                                                  /*+ ORDERED */
               BASIAS.GID "GID_D",
               BASIAS.GEOMETRY AS BASIAS_GEOMETRY,
               PARC.GID "GID_A",
               PARC.GEOMETRY AS PARC_GEOMETRY,
               'PCI_PARC' "CLASS",
               'BASIAS_' AS NAME,
               0 "TYPE"
          FROM A_REIMS.BASIAS BASIAS, A_REIMS.PCI_PARC PARC
         WHERE SDO_WITHIN_DISTANCE (PARC.GEOMETRY,
                                    BASIAS.GEOMETRY,
                                    'distance=200') = 'TRUE'
               ) S
               ;
Cardinalité et coût trop important pour que je puisse espérer un temps de traitement raisonnable et pourtant je n'ai que 608 objets en BASIAS et ~60000 en PCI_PARC.

Quelqu'un a-t'il un indice à me donner ?
H.ile est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h39   #2
Membre Expert
 
Inscription : août 2008
Messages : 1 271
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 1 271
Points : 1 929
Points : 1 929
Je ne connais pas du tout spatial mais autant évaluer SDO_GEOM.SDO_DISTANCE (S.PARC_GEOMETRY,S.BASIAS_GEOMETRY, 1) 1 fois dans la sous requête que plusieurs fois.
Par ailleurs je ne vois pas l'intérêt du hint ordered surtout avec 2 tables.
skuatamad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/01/2011, 14h46   #3
Nouveau Membre du Club
 
Avatar de H.ile
 
Architecte de système d'information
Inscription : janvier 2008
Messages : 107
Détails du profil
Informations personnelles :
Âge : 32
Localisation : Macao

Informations professionnelles :
Activité : Architecte de système d'information

Informations forums :
Inscription : janvier 2008
Messages : 107
Points : 37
Points : 37
Merci pour l'astuce sur les distances. Je vais essayer.
Ma crainte, qu'il calcule les distances pour l'ensemble des objets entre eux.
Sinon pour le /* Ordered */, il s'agit d'optimiser le plan d'exécution compte tenu de l'utilisation d'une table spatiale comme référence dans la fonction SDO_WITHIN_DISTANCE (préconisé par Oracle, pour ce que ça peut valoir).

**************

en fait pas besoin de la sous-req. le ntile fonctionne très bien dans le corps de ma requête géographique. Mais l'optimisation ne semble pas aller avec...
H.ile 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 01h24.


 
 
 
 
Partenaires

Hébergement Web