2008-09-17 7 views
1

Quels sont les avantages et les inconvénients potentiels de chacune de ces requêtes compte tenu des différentes bases de données, configurations, etc.? Y a-t-il un moment où l'un serait plus efficace que l'autre? Vice versa? Y a-t-il une meilleure façon de le faire? Pouvez-vous expliquer pourquoi?Comparaison des jonctions croisées et internes de MySQL

Requête 1:

SELECT 
    * 
FROM 
    table_a, table_b, table_c 
WHERE 
    table_a.id = table_b.id AND 
    table_a.id = table_c.id AND 
    table_a.create_date > DATE('1998-01-01'); 

Requête 2:

SELECT 
    * 
FROM 
    table_a 
INNER JOIN table_b ON 
    table_a.id = table_b.id 
INNER JOIN table_c ON 
    table_a.id = table_c.id 
WHERE 
    table_a.create_date > DATE('1998-01-01'); 

Répondre

2

Même requête, révision différente de la spécification SQL. L'optimiseur de requête doit proposer le même plan de requête pour ceux-ci.

-1

Je suis d'accord, il est sonnant un peu trop comme devoirs!

Si ce n'est pas des devoirs alors je suppose que la réponse la plus simple est la lisibilité.

Comme indiqué précédemment, les deux requêtes produiront le même plan d'exécution. Si tel est le cas, alors la seule chose dont vous avez besoin de vous soucier de la maintenabilité.

0

Non. Je partage juste une base de données volumineuse et débordée avec quelques collègues et j'essaye de trouver quelques manières d'obtenir plus de bang de processeur pour notre argent. J'ai regardé en ligne mais je n'ai pas trouvé une bonne explication pour certaines questions comme celle-ci.

Désolé pour les devoirs-y. Je suppose que j'ai passé trop d'années en tant qu'AT.

0

En fait, je pense que la requête 2 est plus lisible. Pensez à quand vous arrivez à dire 5,6, ou 7 tables lorsque vous appuyez sur la clause where dans la première requête. Suivre les jointures pourrait devenir désordonné.

En ce qui concerne la performance, je n'en ai aucune idée. Je parie que si vous allez sur le site MySQL, il y aurait des infos là-bas - probablement des exemples de jointures. Professionnellement, je n'ai travaillé que sur un seul projet. Mais c'était un gros problème, et ils suivaient toujours le format de la requête 2. C'était en utilisant Microsoft SQL Server cependant.