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

Langage SQL Discussion :

Optimisation requête avec jointures


Sujet :

Langage SQL

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Optimisation requête avec jointures
    Bonsoir,

    J'essaye désespérément d'optimiser une requête avec pas mal de jointures qui me retourne l'erreur #1104 -
    The SELECT would examine more than MAX_JOIN_SIZE rows; check your WHERE and use SET SQL_BIG_SELECTS=1 or SET SQL_MAX_JOIN_SIZE=# if the SELECT is okay
    .

    J'ai bien rajouté la commande SET SQL_BIG_SELECTS=1 mais cela prend encore pas mal de temps à l'exécution. J'ai d'ailleurs noté dans un rapport du manager ovh de mon sql privé un problème qui peut peut être améliorer les performances : Jointures effectuée sans utiliser d'index.

    Je vous joins un bout de la requête qui déjà me retourne l'erreur, il s'agit de calculer la note moyenne de chaque artiste en fonction de critiques et de sa présence dans le casting :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT CAST.idartiste AS idartisteN, AVG( CRIT.note ) AS Moyenne, CAST.type AS typeartiste
    FROM table_casting CAST, table_critique CRIT
    WHERE CAST.idfilm = CRIT.idarticle
    GROUP BY CAST.idartiste
    ORDER BY Moyenne DESC
    LIMIT 0 , 2000
    si vous avez une idée sur la façon d'optimiser cela, je suis preneur !

    lionel.

  2. #2
    Rédacteur

    Avatar de SQLpro
    Homme Profil pro
    Expert bases de données / SQL / MS SQL Server / Postgresql
    Inscrit en
    Mai 2002
    Messages
    21 761
    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 761
    Points : 52 547
    Points
    52 547
    Billets dans le blog
    5
    Par défaut
    Commencez par respecter la charte de postage : http://www.developpez.net/forums/a69...gage-sql-lire/

    Sans cela il est impossible de vous aider.

    Donnez aussi la liste des index et le plan de requête.

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

  3. #3
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    1) CAST est un mauvais nom d'alias car c'est un mot réservé du langage SQL.

    2) Toutes les colonnes du SELECT ne faisant pas l'objet d'une fonction de groupage doivent figurer dans le GROUP BY sous peine de voir des valeurs aléatoires pour les colonnes manquantes.

    3) Les jointures s'écrivent depuis 20 ans avec l'opérateur JOIN ; il serait temps de s'y mettre !
    J'ai de plus de gros doutes sur la condition de jointure !
    J'imagine qu'il peut y avoir plusieurs critiques pour un film et je trouve bizarre cette égalité entre l'identifiant du film et celui de l'article !

    4) Si effectivement vos tables ne sont pas indexées, il est grand temps d'y remédier !

    Bref, vous avez besoin d'une grosse révision en matière de BDDR et de SQL !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Excusez moi de ne pas avoir respecté la norme de postage, je suis un novice sur le forum.

    J'ai réécrit la requête en tenant compte de deux remarques (modification de la variable CAST et la syntaxe JOIN).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT CASTING.idartiste AS idartisteN, AVG( CRIT.note ) AS Moyenne, CASTING.type AS typeartiste
    FROM cinefamilia_casting CASTING LEFT JOIN cinefamilia_critique CRIT ON CRIT.idarticle=CASTING.idfilm
    GROUP BY CASTING.idartiste
    ORDER BY Moyenne DESC
    LIMIT 0 , 100
    Pour ce qui est du plan de requête, je ne connaissais pas et je viens de voir qu'il fallait rajouter EXPLAIN devant la requête. J'obtiens cela (je ne sais pas comment l'afficher correctement) mais je n'y comprends pas grand chose :

    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE CASTING ALL NULL NULL NULL NULL 50362 Using temporary; Using filesort
    1 SIMPLE CRIT ALL NULL NULL NULL NULL 4525

    Concernant le problème sur les index (j'utilise phpmyadmin et Mysql), je ne sais pas si c'est tout à fait cela, mais je déclare des clefs primaires sur chaque table, et je n'ai jamais utilisé ce genre de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX #nom_index ON #nom_schem.#nom_table
    Je n'ai malheureusement pas compris le problème sur mon GROUP BY. Quelle est la syntaxe qui permet de faire figurer dans le GROUP BY des colonnes qui n'y sont pas sujettes ?

  5. #5
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Gingirou Voir le message
    Excusez moi de ne pas avoir respecté la norme de postage, je suis un novice sur le forum.
    Nous sommes tous passés par là.
    Il nous faudrait la composition de tes tables, par exemple à l'aide du résultat complet des requêtes SHOW CREATE TABLE la_table.

    J'ai réécrit la requête en tenant compte de deux remarques (modification de la variable CAST et la syntaxe JOIN).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    SELECT CASTING.idartiste AS idartisteN, AVG( CRIT.note ) AS Moyenne, CASTING.type AS typeartiste
    FROM cinefamilia_casting CASTING LEFT JOIN cinefamilia_critique CRIT ON CRIT.idarticle=CASTING.idfilm
    GROUP BY CASTING.idartiste
    ORDER BY Moyenne DESC
    LIMIT 0 , 100
    C'est mieux. Autant utiliser des alisa les plus cours possibles ; 'ca' pour casting et 'cr' pour critique aurait été suffisant à la compréhension de la requête et aurait allégé son écriture et sa lecture.

    Pour ce qui est du plan de requête, je ne connaissais pas et je viens de voir qu'il fallait rajouter EXPLAIN devant la requête. J'obtiens cela (je ne sais pas comment l'afficher correctement) mais je n'y comprends pas grand chose :

    id select_type table type possible_keys key key_len ref rows Extra
    1 SIMPLE CASTING ALL NULL NULL NULL NULL 50362 Using temporary; Using filesort
    1 SIMPLE CRIT ALL NULL NULL NULL NULL 4525
    Visiblement, la requête n'utilise aucun index (possible_keys, key et key_len à NULL).

    Concernant le problème sur les index (j'utilise phpmyadmin et Mysql), je ne sais pas si c'est tout à fait cela, mais je déclare des clefs primaires sur chaque table, et je n'ai jamais utilisé ce genre de syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CREATE INDEX #nom_index ON #nom_schem.#nom_table
    Donne la composition complète des tables (voir plus haut).

    Je n'ai malheureusement pas compris le problème sur mon GROUP BY. Quelle est la syntaxe qui permet de faire figurer dans le GROUP BY des colonnes qui n'y sont pas sujettes ?
    Dans le SELECT, tu as 3 colonnes de résultat :
    - CASTING.idartiste ;
    - CASTING.type ;
    - AVG( CRIT.note ).
    CRIT.note fait l'objet d'une opération de groupage (AVG) mais pas les deux autres. Il faut donc que les deux autres colonnes figurent dans le GROUP BY :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GROUP BY CASTING.idartiste, CASTING.type
    Mais je suis toujours étonné par la condition de jointure !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'ai fait des show create table des 2 tables qui interviennent dans la requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    CREATE TABLE `cinefamilia_casting` (
     `id` bigint(255) NOT NULL AUTO_INCREMENT,
     `idartiste` bigint(255) NOT NULL,
     `idfilm` bigint(255) NOT NULL,
     `type` varchar(255) NOT NULL,
     `ordre` bigint(255) NOT NULL,
     `typecasting` varchar(255) NOT NULL DEFAULT 'film',
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=52182 DEFAULT CHARSET=utf8
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    CREATE TABLE `cinefamilia_critique` (
     `id` bigint(255) NOT NULL AUTO_INCREMENT,
     `iduser` varchar(255) NOT NULL,
     `idarticle` bigint(255) NOT NULL,
     `txt` longtext NOT NULL,
     `note` float(10,1) NOT NULL,
     `actif` varchar(255) NOT NULL,
     `date` datetime NOT NULL,
     `date_modif` datetime NOT NULL,
     `type` varchar(255) NOT NULL DEFAULT 'film',
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=4628 DEFAULT CHARSET=utf8
    J'ai réécrit la requête comme tu me l'as dit, avec des alias plus courts et le GROUP BY sur les type et idartiste (mais cela va donner un autre résultat:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CA.idartiste AS idartisteN, AVG( CR.note ) AS Moyenne, CA.type AS typeartiste
    FROM cinefamilia_casting CA LEFT JOIN cinefamilia_critique CR ON CR.idarticle=CA.idfilm
    GROUP BY CA.idartiste, CA.type
    ORDER BY Moyenne DESC
    LIMIT 0 , 100
    Quand j'exécute la requête sous phpmyadmin cela me plante la page...

  7. #7
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Ça manque d'index !
    Il faudrait indexer au moins les colonnes intervenant dans la condition de jointure (que je ne comprends toujours pas, un film n'étant pas un article et un article n'étant pas un film ! ) :
    - idarticle ;
    - idfilm

    Et tant qu'on y est, puisque ce sont vraissemblablement des clés étrangères, même si les contraintes de clés étrangères ne sont pas utilisées par le moteur MyISAM, indexe aussi :
    - idartiste ;
    - iduser.

    D'une manière générale, j'ai l'impression que c'est carrément le modèle de données qui est à revoir. Les colonnes type et typecasting seraient à externaliser. D'ailleurs que contient la colonne "type" ?

    Ça m semble très fouillis tout ça !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    J'avais mis le nom idarticle parce que je voulais que le modèle s'applique à autre chose que des films (livre...), bref ce n'est effectivement pas cohérent.

    La table artistetype c'est pour définir les différents postes liés au film.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `cinefamilia_artistetype` (
     `id` bigint(255) NOT NULL AUTO_INCREMENT,
     `nom` varchar(255) NOT NULL,
     `ordre` bigint(255) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
    Je n'ai jamais indexé autre chose que des clefs primaires, la manipulation qui consiste à créer un index sur une table est bien celle là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ALTER TABLE `cinefamilia_casting` ADD INDEX ( `idfilm` )
    J'ai maintenant indexé les quatre champs et j'ai refait le plan de requêtes, j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
    1 	SIMPLE 	CA 	ALL 	NULL 	NULL 	NULL 	NULL 	50434 	Using temporary; Using filesort
    1 	SIMPLE 	CR 	ref 	idarticle 	idarticle 	8 	cinefamilia.CA.idfilm 	19
    c'est mieux ?

  9. #9
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    N'est-ce pas plutôt "INNER JOIN" au lieu de "LEFT JOIN" ?

  10. #10
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Citation Envoyé par Gingirou Voir le message
    J'avais mis le nom idarticle parce que je voulais que le modèle s'applique à autre chose que des films (livre...), bref ce n'est effectivement pas cohérent.
    Il n'empêche qu'un article est un article et qu'un film est un film. Quel est, dans votre cas, le sens du mot "article" ?
    Y aurait-il un héritage de données de article vers film et livre ?
    Votre structure est difficilement lisible. Si vous pouviez fournir un schéma de la BDD, ça aiderait ; mais en avez-vous fait un ?

    La table artistetype c'est pour définir les différents postes liés au film.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    CREATE TABLE `cinefamilia_artistetype` (
     `id` bigint(255) NOT NULL AUTO_INCREMENT,
     `nom` varchar(255) NOT NULL,
     `ordre` bigint(255) NOT NULL,
     PRIMARY KEY (`id`)
    ) ENGINE=MyISAM AUTO_INCREMENT=21 DEFAULT CHARSET=utf8
    Et donc dans la table cinefamilia_casting, c'est la colonne type qui référence l'identifiant de cinefamilia_artistetype ?
    Si un artiste peut avoir plusieurs types sur un même film, il est normal qu'ajouter cette colonne dans le groupage de votre requête donne un résultat différent mais si on ne la met pas dans le groupage, il ne faut pas la mettre non plus dans le SELECT car elle n'aurait aucune signification, sa valeur étant aléatoire.

    Je n'ai jamais indexé autre chose que des clefs primaires, la manipulation qui consiste à créer un index sur une table est bien celle là ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ALTER TABLE `cinefamilia_casting` ADD INDEX ( `idfilm` )
    Oui.

    J'ai maintenant indexé les quatre champs et j'ai refait le plan de requêtes, j'obtiens ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    id 	select_type 	table 	type 	possible_keys 	key 	key_len 	ref 	rows 	Extra
    1 	SIMPLE 	CA 	ALL 	NULL 	NULL 	NULL 	NULL 	50434 	Using temporary; Using filesort
    1 	SIMPLE 	CR 	ref 	idarticle 	idarticle 	8 	cinefamilia.CA.idfilm 	19
    c'est mieux ?
    Oui, maintenant l'index est utilisé pour la seconde table.
    Comme le suggère Fred_34, une jointure interne semble plus appropriée. Que donne la moyenne pour un artiste qui n'a pas été noté ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mars 2011
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2011
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Il n'empêche qu'un article est un article et qu'un film est un film. Quel est, dans votre cas, le sens du mot "article" ?
    J'ai orienté ma construction autour des fiches articles. A la base j'ai des articles sur lesquels je met des critiques avec notation. Ces articles s’interprètent aussi bien comme fiche ciné ou fiche livre, tout dépend de leur contenu. Je leur attribue ensuite un "casting" avec un type correspondant au poste.

    Y aurait-il un héritage de données de article vers film et livre ?
    Je ne crois pas, ou autrement c'est involontaire.

    Votre structure est difficilement lisible. Si vous pouviez fournir un schéma de la BDD, ça aiderait ; mais en avez-vous fait un ?
    J'ai vu que vous conseillez Open ModelSphere, je l'ai chargé et j'ai essayé de faire un schéma, je ne pense pas que le résultat soit concluant. Je dois vous avouer que je ne fais jamais ce travail préparatoire, je suis un autodidacte "bricoleur".

    Et donc dans la table cinefamilia_casting, c'est la colonne type qui référence l'identifiant de cinefamilia_artistetype ?
    Oui

    Si un artiste peut avoir plusieurs types sur un même film, il est normal qu'ajouter cette colonne dans le groupage de votre requête donne un résultat différent mais si on ne la met pas dans le groupage, il ne faut pas la mettre non plus dans le SELECT car elle n'aurait aucune signification, sa valeur étant aléatoire.
    Effectivement, mais il me faut à un moment donné cette information (peut être dans une deuxième requête du coup). En effet, je calcule des top artistes en fonction des types. Pour le top acteur, réalisateur je dois trouver une façon de vérifier que l'artiste sélectionné n'a pas dans son calcul un type monteur ou compositeur.

    Comme le suggère Fred_34, une jointure interne semble plus appropriée.
    J'ai réécrit la requête, il faut que je me documente pour voir la différence entre un left join et un inner join, j'utilise tout le temps un left join sans réfléchir (quand je n'ai pas la version archaïque de la requête) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT CA.idartiste AS idartisteN, AVG( CR.note ) AS Moyenne
    FROM cinefamilia_casting CA INNER JOIN cinefamilia_critique CR ON CR.idarticle=CA.idfilm
    GROUP BY CA.idartiste
    ORDER BY Moyenne DESC
    LIMIT 0 , 100
    Que donne la moyenne pour un artiste qui n'a pas été noté ?
    En principe ce n'est pas sensé arriver, chaque fiche article est critiquée, elle a donc une note dont l'artiste hérite si il a été associé à la fiche via le casting.

Discussions similaires

  1. Optimisation requête avec jointure externe SQL Server
    Par ICEMAN_60 dans le forum Développement
    Réponses: 2
    Dernier message: 28/11/2011, 10h08
  2. Optimisations requête avec jointures
    Par Superskunk dans le forum Requêtes
    Réponses: 1
    Dernier message: 18/10/2009, 11h05
  3. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum Développement
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  4. [SQL 2000] Optimisation requête avec jointure multiple
    Par zooffy dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 18/09/2007, 15h38
  5. optimisation requête avec jointures externes
    Par beurtom dans le forum Oracle
    Réponses: 14
    Dernier message: 16/10/2006, 16h50

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