IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

requête et tri


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de PIEPLU
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    507
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Avril 2003
    Messages : 507
    Par défaut requête et tri
    Bonjour,

    Actuellement, je fais cette requête :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT lat, lon, ( 6366 * ACOS( COS( RADIANS( 49.188005 ) ) * COS( RADIANS( lat ) ) * COS( RADIANS( lon ) - RADIANS( - 0.3661 ) ) + SIN( RADIANS( 49.188005 ) ) * SIN( RADIANS( lat ) ) ) ) AS distance
    FROM Entreprises
    WHERE lat
    BETWEEN 49.1 
    AND 49.3 
    AND lon
    BETWEEN -1
    AND 0

    Celle-ci s'éxécute en 0,0015 sec, ce qui me semble assez raisonnable.

    La même requête avec un tri de distance :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    SELECT lat, lon, ( 6366 * ACOS( COS( RADIANS( 49.188005 ) ) * COS( RADIANS( lat ) ) * COS( RADIANS( lon ) - RADIANS( - 0.3661 ) ) + SIN( RADIANS( 49.188005 ) ) * SIN( RADIANS( lat ) ) ) ) AS distance
    FROM Entreprises
    WHERE lat
    BETWEEN 49.1 
    AND 49.3 
    AND lon
    BETWEEN -1
    AND 0 
    ORDER BY `distance` ASC

    Et elle s'éxécute en plus de 2 secondes, ce qui ne va plus du tout

    Auriez-vous une idée d'optimisation ?

    Merci

  2. #2
    Membre Expert
    Avatar de gene69
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    1 769
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 769
    Par défaut
    euuuh t'es pas sur le meilleur forum.

    essaie de séparer le trie du calcul de distance. selon la version de mysqsl il faut que les colonnes de la table intermédiaire soit en majuscule.
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    SELECT x.lat, x.lon, x.distance 
    FROM (
    SELECT lat, lon, ( 6366 * ACOS( COS( RADIANS( 49.188005 ) ) * COS( RADIANS( lat ) ) * COS( RADIANS( lon ) - RADIANS( - 0.3661 ) ) + SIN( RADIANS( 49.188005 ) ) * SIN( RADIANS( lat ) ) ) ) AS distance
    FROM Entreprises
    WHERE lat
    BETWEEN 49.1 
    AND 49.3 
    AND lon
    BETWEEN -1
    AND 0
    ) as X
    ORDER BY X.distance

    heureusement il y a Explain...

  3. #3
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    Bonsoir,

    je pense que tu aura plus de réponse sur le forum MySQL comme l'a dit gene69,

    utilise EXPLAIN :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    EXPLAIN SELECT ... -- suite de la requête
    Il t'affichera le plan d'exécution de la requête tu pourra voir ce que fait MySQL pour exécuter ta requête.

  4. #4
    Invité de passage
    Homme Profil pro
    Etudiant Manager des systèmes d'informations
    Inscrit en
    Janvier 2013
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Etudiant Manager des systèmes d'informations
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2013
    Messages : 1
    Par défaut
    Vu que c'est là autant que cela serve ^^ donc j'ai une petite question? si tu fais le tri avec une fonction PHP genre array_multisort() qui est le plus rapide? SQL ou PHP? je me suis posé la question récemment et je n'ai pas su répondre.

  5. #5
    Membre Expert
    Homme Profil pro
    Développeur C++
    Inscrit en
    Avril 2012
    Messages
    771
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur C++
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2012
    Messages : 771
    Par défaut
    MySQL sera toujours plus performant pour trier ces enregistrement.

  6. #6
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Toujours privilégier le moteur de base de données car les optimisations internes en plus d'une approche ensembliste sont largement supérieures à n'importe quel routine de tri d'un langage.

Discussions similaires

  1. Fusion de deux requêtes pour tri partiel
    Par zebiloute dans le forum Langage SQL
    Réponses: 6
    Dernier message: 04/12/2007, 11h29
  2. Requête de tri sur les 20 derniers enregistrements
    Par kryogen dans le forum Langage SQL
    Réponses: 16
    Dernier message: 16/04/2007, 10h40
  3. [MySQL] Requête de tri sur les 20 derniers enregistrements
    Par kryogen dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 16/04/2007, 10h26
  4. Aide pour requête de Tri assez spécial (Oracle)
    Par Chips dans le forum Langage SQL
    Réponses: 2
    Dernier message: 29/04/2005, 10h56
  5. pb de requête de tri
    Par devalender dans le forum SQL
    Réponses: 4
    Dernier message: 08/09/2004, 15h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo