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 :

CREATE INDEX & WHERE


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut CREATE INDEX & WHERE
    Bonjour à tous,

    J'ai lu que pour une recherche plus efficace dans une table, on pouvait faire plusieurs index avec des WHERE.

    Par exemple, pour une table "books" avec les colonnes :
    - id
    - id_category
    - title
    - description

    Au lieu de faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    CREATE INDEX idx_books_description ON books USING gist(title gist_trgm_ops)
    On pouvait faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    CREATE INDEX idx_books_description ON books USING gist(title gist_trgm_ops) WHERE id_category = 1;
    CREATE INDEX idx_books_description ON books USING gist(title gist_trgm_ops) WHERE id_category = 2;
    CREATE INDEX idx_books_description ON books USING gist(title gist_trgm_ops) WHERE id_category = 3;
    etc.
    Et après lorsque l'on va rechercher un titre, on place un "WHERE category = x" avant le code de recherche. Cela permet d'utiliser un index moins gros et donc d'améliorer les performances.

    Je possède ces tables :

    régions
    - id
    - name

    rues
    - id
    - name

    region_rues
    - id
    - id_region
    - id_rue

    Et j'aimerais tester l'indexation des rues en les décomposant par région.

    Est-ce que c'est possible de faire ça ? Comment puis-je lier ces tables lors de la création de mon index ? Pouvez-vous me donner le code qui va bien, par exemple pour indexer selon la région d'index 1 (et je me débrouillerai pour faire les autres).

    Merci par avance,

    Bonne journée

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Dans un premier temps je voudrais tester les performances avec des jointures.

    Car même si les indexes utilisés lors des requêtes deviennent plus petits, si ça nécessite de faire des jointures partout, ça risque d'être contre productif..

  3. #3
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Salut
    Une rue peut-elle être liée à plus d'une région?
    @+

  4. #4
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    Salut
    Une rue peut-elle être liée à plus d'une région?
    @+
    Je peux faire en sorte que non

  5. #5
    Membre Expert
    Avatar de alassanediakite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2006
    Messages
    1 599
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : Mali

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2006
    Messages : 1 599
    Billets dans le blog
    8
    Par défaut
    Si une rue est liée à une seule région alors c'est possible de faire un (ou des) index filtré (ou index partiel).
    Sinon les vues matérialisées sont la solution. Mais PostgreSQL ne connaitra les vues matérialisées qu'avec la version future (9.3) attendu sous peu.
    @+

  6. #6
    Membre éprouvé
    Profil pro
    Inscrit en
    Février 2004
    Messages
    1 825
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 1 825
    Par défaut
    Citation Envoyé par alassanediakite Voir le message
    Si une rue est liée à une seule région alors c'est possible de faire un (ou des) index filtré (ou index partiel).
    Sinon les vues matérialisées sont la solution. Mais PostgreSQL ne connaitra les vues matérialisées qu'avec la version future (9.3) attendu sous peu.
    @+
    En attendant les vues matérialisées, je vais tenter de faire par index filtrés.

    Au hasard, j'ai tenté ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    CREATE INDEX idx_rues_par_region_29
       ON rues, region_rues
       USING GIST("name" gist_trgm_ops)
       WHERE
            region_rues.id_region = 29 AND
            rues.id = region_rues.id_rue;
    Mais postgresql n'a pas apprécié.

    Peux-tu me donner la syntaxe s'il te plait ?

    Merci par avance

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

Discussions similaires

  1. "create index" n'update pas les stats datachange()
    Par vinceroi dans le forum Adaptive Server Enterprise
    Réponses: 1
    Dernier message: 22/09/2013, 18h21
  2. Réponses: 6
    Dernier message: 07/09/2010, 10h10
  3. dbms_job : drop & create index impossible
    Par okilele dans le forum SQL
    Réponses: 1
    Dernier message: 18/04/2007, 08h34
  4. Réponses: 3
    Dernier message: 30/06/2006, 22h56
  5. ORA-00054 resource busy on create index
    Par ducho dans le forum Administration
    Réponses: 2
    Dernier message: 01/10/2004, 14h35

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