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

SQL Oracle Discussion :

Bonne stratégie pour améliorer les performances d'une requête


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    consultant informatique
    Inscrit en
    Août 2018
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : consultant informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 172
    Par défaut Bonne stratégie pour améliorer les performances d'une requête
    Dans le schéma ci dessus on me demande quelle serait une bonne stratégie pour améliorer
    les performances des requêtes se basant sur la colonne"name" de la table PRODUCT_CATEGORY?
    on me propose des solutions et je dois en choisir une(la bonne) parmi ces 5 solutions:

    Solution 1:créer un index sur la colonne"name"
    Solution2:etendre la clé primaire pour inclure la colonne"name"
    en plus de la colonne"product_category_id"

    Solution3:créer une clé étrangère sur la colonne "name"
    Solution4:Changer la clé primaire de "product_category_id" vers "name"
    Solution5:Déclarer que la colonne"name" ne peut pas contenir de doublons

    Moi, j'ai choisi la solution 3 qui est de créer une clé étrangère sur la colonne"name",
    ai je raison ou tort?

    Voici le schéma:

    Nom : schéma.png
Affichages : 619
Taille : 37,3 Ko

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Décembre 2019
    Messages
    1 175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Décembre 2019
    Messages : 1 175
    Par défaut
    Bonjour,

    Tu ne peux pas créer un clé étrangère sur name puisqu'elle n'est pas la clé primaire. Pour éventuellement améliorer les perfs d'un requête qui fait une recherche sur name, il faut créer un index sur name.

  3. #3
    Membre très actif
    Homme Profil pro
    consultant informatique
    Inscrit en
    Août 2018
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : consultant informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 172
    Par défaut re
    Je ne comprends pas ce que vous dites,pourquoi il faut qu'elle soit une clé primaire d'abord
    avant que je puisse la créer en clé étrangère?

    Pour créer une clé étrangère, il faut juste créer une contrainte avec "constraint"
    et ensuite le mot clé"foreign key" et la table et la table referencée.

  4. #4
    Expert confirmé
    Homme Profil pro
    Responsable Données
    Inscrit en
    Janvier 2009
    Messages
    5 434
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable Données

    Informations forums :
    Inscription : Janvier 2009
    Messages : 5 434
    Par défaut
    Et dans ton cas quelle est la table référencée ?
    Que dit ton cours concernant les clés étrangères ?

    Tatayo.

  5. #5
    Membre très actif
    Homme Profil pro
    consultant informatique
    Inscrit en
    Août 2018
    Messages
    172
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : consultant informatique

    Informations forums :
    Inscription : Août 2018
    Messages : 172
    Par défaut RE
    Dans mon cas il n'y a pas de table référencée oui,en fait
    la colonne (name )de ma table PRODUCT_CATEGORY doit
    faire référence à la colonne(name) d'une autre table,c'est ça
    la définition de la clé étrangère,mais rien ne me dit que la colonne
    (name) doit être absolument la clé primaire de cette table référencée,
    est ce que c'est une condition nécessaire?
    c'est ça que je veux comprendre

  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
    Une clef étrangère doit référencer une colonne portant une contrainte d'unicité, ce qui inclut de facto les clefs primaires.

  7. #7
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 998
    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 998
    Billets dans le blog
    6
    Par défaut
    Citation Envoyé par master MI Voir le message
    Je ne comprends pas ce que vous dites,pourquoi il faut qu'elle soit une clé primaire d'abord
    avant que je puisse la créer en clé étrangère?

    Pour créer une clé étrangère, il faut juste créer une contrainte avec "constraint"
    et ensuite le mot clé"foreign key" et la table et la table referencée.
    Lorsque vous créez une contrainte de clef étrangères, le mot clé REFERENCES indique que la valeur de la clé étrangères doit correspondre à une et une seule valeur de référence. C'est pourquoi créer une clé étrangères n'est possible que sur une ou plusieurs colonnes dotée d'une contrainte d'unicité. En fait le langage SQL est mal fait de ce point de vue, car on devrait pouvoir créer une contrainte FK en référence à une contrainte PK ou UNIQUE.... et ce n'est pas le cas, car il faut passer par les colonnes !!!! (absurde entre nous...)
    La raison pour laquelle la référence est unique est assez simple.... Imaginez que vous allez à l'hôtel et que l'on vous donne la clef de la chambre 7.... Vous arrivez dans un couloir et là surprise :
    Nom : Hotel 7.jpg
Affichages : 529
Taille : 48,7 Ko

    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/ * * * * *

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    D'une manière générale une table qui contient une clef primaire de substitution doit impérativement avoir une clé unique fonctionnelle également!

    Regardez la table product_category. Sans la clé fonctionnelle, contraint unique sur la zone name, il est possible d'insérer des "doublons fonctionnels"
    Id Name
    1 Vegetables
    2 Sweets
    3 Vegetables
    4 Vegetables

    Une clé unique sur la zone nom vous assure l'unicité des valeurs et l'impossibilité de la situation décrite ci-dessus.

    Il y a une confusion dans la question entre les indexes qui font partie des structures des données permettant d'améliorer les performances des certaines requêtes et les contraintes qui sont responsables de l'intégrité des données! Le fait que Oracle et autres SGBD crée automatiquement des indexes pour "supporter" certaines types de contraintes ajout beaucoup à cette confusion.

    D'une manière générale parler "performances" sans parler "requêtes SQL" et "volumétrie estimée" est une pure perte de temps.

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

Discussions similaires

  1. Aide pour améliorer les performances Checkbox
    Par nbrau dans le forum VB.NET
    Réponses: 6
    Dernier message: 11/11/2009, 11h35
  2. Améliorer les performances d'une requête avec agrégats
    Par alexis_ dans le forum Requêtes
    Réponses: 4
    Dernier message: 05/11/2009, 22h31
  3. Paramètres pour améliorer les performances du serveur
    Par abdou_ci dans le forum Administration
    Réponses: 7
    Dernier message: 15/05/2008, 14h43
  4. Réponses: 8
    Dernier message: 21/09/2007, 14h51
  5. Optimisation de jsp pour améliorer les performances
    Par djuddju dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 01/12/2006, 05h50

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