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 PostgreSQL Discussion :

Vitesse d'exécution d'une requête


Sujet :

Requêtes PostgreSQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut Vitesse d'exécution d'une requête
    Bonjour,

    J'ai une table d'article contenant + de 2300000 lignes.
    Quand je fais une une simple requête de ce style :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    SELECT id AS id_article, titre, ean, auteur
    FROM site.article
    WHERE (titre LIKE UPPER('%harrington%') OR auteur LIKE UPPER('%harrington%'))
    ORDER BY titre ASC;
    Le temps de réponse est de 2 à 3 secondes.
    J'ai indexé les champs id, ean et titre et je ne sais pas si c'est vraiment utile pour le champ titre.
    Voici la structure de la table article :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
              Colonne           |       Type        |                         Modificateurs
    ----------------------------+-------------------+---------------------------------------------------------------
     id                         | integer           | non NULL Par défaut, nextval('site.article_id_seq'::regclass)
     ean                        | bigint            |
     isbn                       | character(10)     |
     titre                      | character varying | non NULL
     auteur                     | character varying |
    Index :
        "article_pkey" PRIMARY KEY, btree (id)
        "article_ean_key" UNIQUE CONSTRAINT, btree (ean)
        "idx_article_id" btree (id)
        "idx_article_ean" btree (ean)
        "idx_article_titre" btree (titre)
    Sinon, quel serait le moyen d’accélérer la recherche ? Si cela est possible biensur.

    Merci de vos conseils :-)

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Par défaut
    tsvector et index gist/gin

    Regardes chapitre recherche plein texte de la FAQ
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2005
    Messages
    202
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Services à domicile

    Informations forums :
    Inscription : Septembre 2005
    Messages : 202
    Par défaut
    ok, merci, je regarde cela.

  4. #4
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Il faudrait aussi vérifier le plan d'exécution, je ne sais pas si PostgreSQL sait réécrire la requête de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
      SELECT id AS id_article, titre, ean, auteur
        FROM site.article
       WHERE titre LIKE UPPER('%harrington%')
       UNION
      SELECT id AS id_article, titre, ean, auteur
        FROM site.article
       WHERE auteur LIKE UPPER('%harrington%')
    ORDER BY titre ASC;
    Dans cette requête, l'accès se fait par l'index sur titre pour la première partie et par l'index sur auteur sur la seconde.

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 633
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 633
    Billets dans le blog
    10
    Par défaut
    Non, car il y a à la fois une fonction de colonne sur les valeurs recherchées et un wildcard "%" en début de chaine de caractères
    Donc requête non sargable

    Seule une recherche plein texte peut satisfaire ce type de besoin

    Cela dit, 2 à 3 sec c'est pas si mal pour une requete non sargable qui concerne 2 300 000 lignes parcourues 2 fois puisque "OR"

  6. #6
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ce n'est pas en opposition à la requête plain text, c'est en complément.

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

Discussions similaires

  1. Exécution d'une requête à partir d'un shell
    Par Spyco dans le forum Oracle
    Réponses: 3
    Dernier message: 15/03/2006, 10h58
  2. [MySQL] Message d'erreur à l'exécution d'une requête
    Par leloup84 dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 28/02/2006, 14h06
  3. Réponses: 1
    Dernier message: 05/12/2005, 23h24
  4. Arrêt de l'exécution d'une requête MySQL dans DELPHI.
    Par joelmarc dans le forum Bases de données
    Réponses: 9
    Dernier message: 11/10/2004, 16h11
  5. Affichage du temps d'exécution d'une requête
    Par milka dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 22/03/2004, 17h48

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