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 :

Optimisation d'une vue


Sujet :

Requêtes MySQL

  1. #1
    Membre éprouvé Avatar de Christophe Charron
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    931
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 931
    Par défaut Optimisation d'une vue
    Bonjour,

    j'ai des petits soucis de performance sur une requête. La table _act_interlo_mail contient 1 million d'enregistrements, à peu près.

    Comme je ne peux pas faire la requête suivante car la recherche sur le champ recherche n'est pas possible.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select `f1`.`intweb_cleunik` AS `intweb_cleunik`,`f1`.`int_cleunik` AS `int_cleunik`,`f1`.`refweb` AS `refweb`
      ,concat_ws(_utf8' ',`f2`.`prenom`,`f2`.`patronyme`) AS `prenom_nom`
      ,concat_ws(_utf8'',`f2`.`prenom`,_utf8' ',`f2`.`patronyme`,_utf8' (',`f1`.`refweb`,_utf8')') AS `recherche` 
    from (`_act_interlo_mail` `f1` 
      join `_act_interlo` `f2` on((`f1`.`int_cleunik` = `f2`.`int_cleunik`))) 
    where `recherche` like '%xof%' 
    limit 50;
    Je fais donc une vue avec cette requête

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    create view recherche1 as 
    select `f1`.`intweb_cleunik` AS `intweb_cleunik`,`f1`.`int_cleunik` AS `int_cleunik`,`f1`.`refweb` AS `refweb`
      ,concat_ws(_utf8' ',`f2`.`prenom`,`f2`.`patronyme`) AS `prenom_nom`
      ,concat_ws(_utf8'',`f2`.`prenom`,_utf8' ',`f2`.`patronyme`,_utf8' (',`f1`.`refweb`,_utf8')') AS `recherche` 
    from (`_act_interlo_mail` `f1` 
      join `_act_interlo` `f2` on((`f1`.`int_cleunik` = `f2`.`int_cleunik`)));
    pour pouvoir faire un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    select * from recherche1 where `recherche` like '%xof%' limit 50;
    Mais c'est assez long car je ne peux pas créer d'index sur la vue ...

    Il y a-t'il un moyen de faire mieux ? De faire différemment ?

    D'avance, merci pour vos conseils et remarques.

  2. #2
    Membre Expert
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Par défaut
    Aucun index standard n'aidera un "LIKE '%xof%'". Dans MySQL il faut chercher du côté des index FULLTEXT. Il peuvent porter sur plusieurs colonnes mais restent cantonnés à une seule table.

    Pour faire mieux ou indexer une jointure, il faut se tourner faire une indexation textuelle extérieure, genre sphinx.

Discussions similaires

  1. [11g] Create Table depuis une vue, optimisation
    Par Rhodo33 dans le forum SQL
    Réponses: 3
    Dernier message: 28/10/2013, 13h08
  2. optimisation d'une vue avec plusieurs sous-requêtes
    Par jean62 dans le forum Développement
    Réponses: 7
    Dernier message: 08/08/2012, 15h29
  3. Optimisation d'une vue
    Par Superdub dans le forum SQL
    Réponses: 8
    Dernier message: 19/05/2009, 21h58
  4. Réponses: 3
    Dernier message: 18/08/2006, 09h30
  5. Créer une vue pour trier une requete UNION ?
    Par Etienne Bar dans le forum SQL
    Réponses: 3
    Dernier message: 03/01/2003, 20h22

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