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

Langage SQL Discussion :

[mysql] Temps d'exécution + ALGO


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut [mysql] Temps d'exécution + ALGO
    j'utilise une base de donnée mysql.
    j'ai les tables suivants:
    "table_keywords" qui contient les champs suivants id_key, keyword (58000 lignes )
    "lien" qui contient id_link et d'autres donées (12000 lignes)
    table_key_url qui contient id_link, id_key, note (600000 lignes)

    Je veux séléctionner à traver une requête tous les liens qui contiennent les mots clés à rechercher
    en tenant compte de l'orde du note de la relation
    (tous les mots / n'importe quel mot )

    Voila ma requête

    SELECT tku.id_link, tku.position, sum( tku.note ) AS NOTE
    FROM `table_keywords` tk, table_key_url tku
    WHERE tk.id_key = tku.id_key
    AND (
    tk.keyword LIKE '%key1%'
    OR tk.keyword LIKE '%key2%'
    OR tk.keyword LIKE '%key3%'
    )
    GROUP BY tku.id_link order by NOTE DESC limit 0, 10

    cette requête s'éxécute dans un temp fou (30s) je n'ai pas oublié les index



    PS : tku.note decimal(21,15)

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    496
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2004
    Messages : 496
    Points : 585
    Points
    585
    Par défaut
    Salut,

    Ptit question, le résultat correspond bien à ce que tu attends?

    Sinon quand tu dois afficher des enregistrements provenant de plusieurs tables, tu dois utiliser le mot-clé JOIN.

    Va jeter un coup d'oeil ici (chap. sur les jointures ):
    http://sql.developpez.com/

    a+

  3. #3
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    oui ça me donne des résultats que je cherches .. ce n'est pas une question de "join"

  4. #4
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    Vos index ne servent strictement à rien lorsqu'il y a un LIKE avec joker des deux côtés du motif recherché.

    Si vous voulez faire des recherches textuelles performantes il faut un outil ou un modèle adpaté.

    Par exemple sous MS SQL Server vous avez un outil d'indexation textuelle et la possibilité d'utiliser la clause normative SQL:1999 CONTAINS y compris pour rechercher avec des formes flêchies du lemme.

    Si vous voulez implanter un tel mécanisme manuellement dans votre base il faut procéder comme dans l'article que j'ai écrit à ce sujet :
    http://sqlpro.developpez.com/cours/indextextuelle/

    A +

  5. #5
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Je viens de lire votre article ( trop interessant )
    je dois vous dire que dès que j'enléve l'instruction (order by note) le temps d'exécution déminue d'une façon remarquable (2s)
    est ce que c'est un problème de choix de type de la colonne ?
    PS: le champs note est de type decimal

  6. #6
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 849
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Expert bases de données / SQL / MS SQL Server / Postgresql
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2002
    Messages : 21 849
    Points : 52 975
    Points
    52 975
    Billets dans le blog
    6
    Par défaut
    Non, un choix de modèle inadapté. 2s c'est innacceptable pour une requête de ce genre en production.

    A +

  7. #7
    Futur Membre du Club
    Inscrit en
    Septembre 2003
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Septembre 2003
    Messages : 6
    Points : 5
    Points
    5
    Par défaut
    Merci bcp avec l'aide de ton article j'ai pu résoudre mon problème
    Maintenant avec Mysql j'arrive à intérroger la base et avoir une réponse dans des 10ième de secondes ;-)

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

Discussions similaires

  1. Limiter le temps d'exécution d'une requête MySQL
    Par Ceubex dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 11/12/2014, 21h22
  2. Réponses: 1
    Dernier message: 28/09/2009, 08h30
  3. [MySQL] Temps d'exécution d'un script PHP/MySQL
    Par BornBanane dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 21/06/2007, 15h57
  4. php,mysql et le temps d'exécution
    Par midoh20 dans le forum Débuter
    Réponses: 4
    Dernier message: 16/09/2006, 20h13
  5. Temps d'exécution des instructions FPU
    Par ubi dans le forum Assembleur
    Réponses: 2
    Dernier message: 24/10/2003, 18h39

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