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 :

Jointure, index et INET_ATON(), l'index n'est jamais utilisé


Sujet :

Requêtes MySQL

  1. #1
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut Jointure, index et INET_ATON(), l'index n'est jamais utilisé
    Mon problème est le suivant, j'ai quelques tables qui contiennent dans leur champ, des IP.

    Je fais des jointure entre ces tables, en faisant correspondre les IP. Pour comparer les IP, par exemple si je veux tester qu'une IP est bien dans une plage d'IP, j'utilise la fonction INET_ATON() qui transforme une IP en un entier sur 4 octets. En effet, comparer des chaînes contenant directement des IP ne fonctionne pas.

    "19.4.2.1" est en effet plus GRAND que "182.4.2.1" si on compare lkes chaîne dans MySQL.

    Par contre, avec INET_ATON(), plus de problème, INET_ATON(19.4.2.1) est bien plus PETIT que INET_ATON(182.4.2.1).

    Donc j'ai plusieurs requêtes du type :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM table1 t1
    JOIN  table2 t2 ON (INET_ATON(t1.ip) BETWEEN INET_ATON(t2.ip_start) AND INET_ATON(t2.ip_stop));
    La jointure se fait donc sur les champs INET_ATON(t1.ip), INET_ATON(t2.ip_start), et INET_ATON(t2.ip_stop).
    Cette jointure n'utilise pas d'index, car il y a la fonction INET_ATON() qui transforme la valeur de la colonne.

    D'autre part, je ne peux pas mettre en index une clef avec la fonction INET_ATON().

    Ma requête est donc lente.

    J'aimerais trouver un moyen d'accélérer considérablement cette requête.

    Existe-il un moyen simple?

    Merci!
    Хајде Јано коло да играмо

  2. #2
    Rédacteur/Modérateur

    Avatar de Antoun
    Homme Profil pro
    Architecte décisionnel
    Inscrit en
    Octobre 2006
    Messages
    6 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Architecte décisionnel
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2006
    Messages : 6 281
    Points : 11 737
    Points
    11 737
    Par défaut
    Stocker les INET_ATON à la place (ou en plus) des IP.
    Antoun
    Expert Essbase, BO, SQL

    La bible d'Essbase, 2ème édition

  3. #3
    Membre actif
    Profil pro
    Ingénieur développement
    Inscrit en
    Juillet 2004
    Messages
    323
    Détails du profil
    Informations personnelles :
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement

    Informations forums :
    Inscription : Juillet 2004
    Messages : 323
    Points : 291
    Points
    291
    Par défaut
    Ok, je crois que je n'ai pas le choix en effet.

    Merci!
    Хајде Јано коло да играмо

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 16/11/2011, 11h26
  2. mon index n'est pas utilisé
    Par varex dans le forum Débuter
    Réponses: 8
    Dernier message: 14/01/2010, 15h40
  3. Réponses: 4
    Dernier message: 17/09/2009, 20h52
  4. Le paramètres Sender n'est jamais utilisé
    Par Pasqualini dans le forum C++Builder
    Réponses: 3
    Dernier message: 03/02/2009, 16h02
  5. Réponses: 21
    Dernier message: 12/04/2007, 13h45

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