Différence entre SpatialJoin avec «… où…» et «rejoindre… le…»

9

Je me demande où est la différence entre ces deux jointures spatiales et, s'il y a une différence, quand les utiliser.

SELECT *
FROM points p, shapes s
WHERE ST_Within(p.geom, s.geom);

et

SELECT *
FROM points p
INNER JOIN shapes s ON ST_Within(p.geom, s.geom)

Est-on plus rapide dans certaines situations?

Stophface
la source
1
La différence est stylistique, mais lorsque vos tâches s'élargiront pour rejoindre douze à quinze tables, vous comprendrez pourquoi les codeurs SQL expérimentés utilisent JOINexclusivement. Malheureusement, tel qu'il est écrit, il s'agit davantage d'une question SQL pure, et d'un appât d' opinion à cela.
Vince

Réponses:

4

Aucune différence pour les deux déclarations. Postgresql le convertit dans le même plan de requête. Vous pouvez voir les plans en ajoutant simplement EXPLAIN ANALYZEavant votre sélection et recherche le résultat.

Roman Tkachuk
la source
l'un est-il considéré plus rapide que l'autre?
Stophface
doit être non. Postgresql le convertit dans le même plan de requête. Vous pouvez voir les plans en ajoutant juste EXPLAIN ANALYZEavant votre sélection et recherche le résultat.
Roman Tkachuk
6
Je préfère le JOIN car il est trop facile d'oublier la condition lorsqu'il est mélangé O in. Toujours avec l'approche JOIN, vous pouvez utiliser un LEFT pour trouver par exemple des points qui ne se trouvent dans aucune forme. Vous ne pouvez pas faire cela avec le WHERE
LR1234567