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

Requêtes MySQL Discussion :

Lenteurs sur recherches (selon valeur de colonne)


Sujet :

Requêtes MySQL

  1. #1
    Candidat au Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2023
    Messages : 9
    Points : 4
    Points
    4
    Par défaut Lenteurs sur recherches (selon valeur de colonne)
    Bonjour,
    j'ai la table suivante dans mysql:
    Nom : table.gif
Affichages : 86
Taille : 50,2 KoNom : table.gif
Affichages : 86
Taille : 50,2 Ko
    Il s'agit d'une table qui enregistre les données de capteurs selon la date/identifiant capteur.
    La clé primaire est date/id et un index est crée sur l'id, justement pour accélérer les recherches dessus.
    Pour les id, la logique est:
    id=50: température du capteur 50
    id=7050: batterie du capteur 50
    Les températures sont récupérées toutes les 5min et toutes les heures pour la batterie. Il y a une trentaine d'id en tout et la table comporte un peu moins de 6 millions de lignes (oui ça tourne depuis plusieurs années!)
    J'ai besoin de récupérer la dernière valeur pour un id donné, je procède avec la requête SQL suivante (exemple pour 50):
    SELECT DateTime,SensorID,Value FROM SENSORS WHERE SensorID=50 ORDER BY DateTime DESC LIMIT 1"

    Et c'est là que ça devient bizarre:
    Nom : select.gif
Affichages : 64
Taille : 78,3 Ko

    Pour l'id 50, la requête a pris moins de 0.03s et presque 0.5s pour l'id 7050!
    Le test est fait avec phpmyadmin mais le résiltat est le même depuis mon code PHP.

    Ai-je un pb de design de table, de requête? Je pourrais créer une autre table pour ne stocker que les derniers enregistrements mais j'ai raté un truc?

    Merci de votre aide,
    Jean

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 269
    Détails du profil
    Informations personnelles :
    Âge : 47
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 269
    Points : 8 568
    Points
    8 568
    Billets dans le blog
    17
    Par défaut
    Dans ta seconde requête tu fais WHERE SensorID >= 7050.
    Fais plutôt WHERE SensorID = 7050

    Pour récupérer le dernier relevé essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT DateTime, SensorID, Value
    FROM SENSORS
    WHERE SensorID = 7050
        AND DateTime = (SELECT MAX(DateTime) FROM SENSORS WHERE SensorID = 7050)
    ;
    Ou :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT DateTime, SensorID, Value
    FROM SENSORS
    WHERE (DateTime, SendorID) = (
        SELECT MAX(DateTime), SensorID
        FROM SENSORS
        WHERE SensorID = 7050
        GROUP BY SensorID
    );
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Candidat au Club
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Janvier 2023
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Janvier 2023
    Messages : 9
    Points : 4
    Points
    4
    Par défaut
    Bonsoir Seb,

    je ne comprends pas pourquoi tu dis SensorID >= 50, il y a bien seulement = dans la seconde requête mais en tout cas merci beaucoup car ta requête est bien plus rapide!
    Il y avait donc clairement de quoi optimiser ma recherche de l'élément le plus récent.

    Bonne soirée,
    Jean

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2016] Recherche données selon valeur en colonne et en ligne
    Par vitch8 dans le forum Excel
    Réponses: 2
    Dernier message: 03/10/2017, 14h33
  2. Réponses: 5
    Dernier message: 17/02/2015, 20h14
  3. Erreur sur recherche dans une seule colonne
    Par raphael dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 24/04/2008, 14h31
  4. lenteurs sur changement de type de colonne
    Par slausseur dans le forum Administration
    Réponses: 10
    Dernier message: 22/08/2007, 18h37
  5. lenteur sur table avec beaucoup de colonne
    Par ukanoldai dans le forum Oracle
    Réponses: 3
    Dernier message: 23/01/2007, 14h36

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