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

Développement SQL Server Discussion :

Index sur deux colonnes


Sujet :

Développement SQL Server

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 201
    Points : 69
    Points
    69
    Par défaut Index sur deux colonnes
    Bonjour,

    Je dispose de table avec plusieurs colonnes dont 2 colonnes id1 et id2 en integer.

    Je fais souvent des requetes sur l'id1 ou sur l'id2 ou sur les deux dans un ordre (id1,id2) ou dans l'autres (id2,id1).

    J'ai de nombreuses tables avec ces deux ids

    Pour rendre les requetes plus efficace, je voudrais créer des index sur ces deux champs.

    Ma question est:
    Pour rendre les requetes plus efficace, est ce que créer un index unique sur (id1,id2) suffit ou est qu'il faut que:
    • je crée un index sur (id1,id2)
    • Je crée un index sur (id2,id1)
    • Je crée un index sur id1
    • Je crée un index sur id2



    Merci pour vos lumières

  2. #2
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 071
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 071
    Points : 9 438
    Points
    9 438
    Par défaut
    Je créerais un index sur (id1,id2) et un autre sur (id2, id1).
    Si tu crées ces 2 index, les 2 autres deviennent totalement inutiles.
    Si un traitement a besoin idéalement d'un index sur id1, le moteur devrait normalement constater que l'index sur (id1, id2) fait le job aussi bien.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  3. #3
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 796
    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 796
    Points : 52 823
    Points
    52 823
    Billets dans le blog
    5
    Par défaut
    Il n'est pas possible de répondre aussi simplement sans savoir les requêtes que vous lancez.

    En effet, cela dépend des opérateurs de comparaisons que vous faites (=, >, >=, <, <=, <>, LIKE, BETWEEN) et des différents prédicats du WHERE, de la clause HAVING, de la jointure et de l'option OFFSET / FETCH dans la clause ORDER BY (tout cela sont des prédicats de recherche susceptibles d'utiliser l'index en mode "seek" ou "lookup"). Mais aussi du regroupement (GROUP BY, DISTINCT, UNION) et des colonnes utilisées dans les autres clauses (SELECT, ORDER BY, HAVING...), cela pouvant conduire à l'ajout d'une clause INCLUDE à la définition de votre index. Et bien entendu de la distribution des données pour ces colonnes...

    Commencez par poster les requêtes (complètes) et là on pourra vous aider !

    À me lire :
    https://sqlpro.developpez.com/cours/quoi-indexer

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2014
    Messages
    201
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2014
    Messages : 201
    Points : 69
    Points
    69
    Par défaut
    Bonjour,

    Merci pour vos retours.
    Je fais de nombreuses requêtes de tous types.
    Mais c'est pour 99% du temps :

    table1.id1=table2.id1 and table1.id2=table2.id2
    table1.id1=table2.id1
    table1.id2=table2.id2

    C'est surtout pour lier 2 tables entre elles avec des JOIN
    pas de group by ou order by sur ces colonnes

    Ces deux colonnes sont des entiers.

    Merci

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 164
    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 164
    Points : 38 976
    Points
    38 976
    Billets dans le blog
    9
    Par défaut
    En ce cas, je rejoins la réponse n°2 de tbc92.
    Si les colonnes sont bien de même type de part et d'autre (integer), alors les prédicats seront indexables.

    Pouvez-vous communiquer le DDL de création des deux tables, en particulier les contraintes foreign key.

  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 796
    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 796
    Points : 52 823
    Points
    52 823
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par olysmar2 Voir le message
    Bonjour,

    Merci pour vos retours.
    Je fais de nombreuses requêtes de tous types.
    Mais c'est pour 99% du temps :

    table1.id1=table2.id1 and table1.id2=table2.id2
    table1.id1=table2.id1
    table1.id2=table2.id2...

    Un index qui ne porterait juste que sur les colonnes d'un prédicat n'est pas toujours utilisé. C'est pourquoi il nous faut l'intégralité de vos requêtes car les clauses SELECT, FROM, HAVING, GROUP BY, ORDER BY et toutes les sous requêtes sont prise en compte dans le choix de l'index....

    Donc, encore une fois postez vos requêtes et le DDL des tables et index.

    A +
    Frédéric Brouard - SQLpro - ARCHITECTE DE DONNÉES - expert SGBDR et langage SQL
    Le site sur les SGBD relationnels et le langage SQL: http://sqlpro.developpez.com/
    Blog SQL, SQL Server, SGBDR : http://blog.developpez.com/sqlpro
    Expert Microsoft SQL Server - M.V.P. (Most valuable Professional) MS Corp.
    Entreprise SQL SPOT : modélisation, conseils, audit, optimisation, formation...
    * * * * * Expertise SQL Server : http://mssqlserver.fr/ * * * * *

Discussions similaires

  1. Jointure sur un index à deux colonnes
    Par hbellahc dans le forum Adaptive Server Enterprise
    Réponses: 5
    Dernier message: 10/03/2011, 19h15
  2. Afficher des enregistrements sur deux colonnes
    Par Dauphind dans le forum Access
    Réponses: 1
    Dernier message: 22/06/2006, 14h16
  3. [Tableaux] Array sur deux colonnes et foreach..
    Par shadeoner dans le forum Langage
    Réponses: 4
    Dernier message: 16/03/2006, 08h46
  4. Index sur une colonne Date
    Par sjaeger dans le forum Oracle
    Réponses: 11
    Dernier message: 10/11/2005, 14h55
  5. [CR] Faire un groupe sur deux colonnes, voir mon exemple
    Par Etienne51 dans le forum SAP Crystal Reports
    Réponses: 6
    Dernier message: 08/10/2004, 14h02

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