ความแตกต่างระหว่าง SpatialJoin กับ“ …ที่ไหน…” และ“ เข้าร่วม…บน…”


9

ฉันสงสัยว่าความแตกต่างระหว่างการรวมเชิงพื้นที่ทั้งสองนี้คืออะไรและหากมีความแตกต่างเมื่อใดควรใช้แบบใด

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

และ

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

เร็วกว่าในบางสถานการณ์หรือไม่?


1
ความแตกต่างคือโวหาร แต่เมื่องานของคุณขยายเพื่อเข้าร่วมสิบสองถึงสิบห้าตารางคุณจะเห็นว่าเหตุใดตัวแปลงสัญญาณ SQL ที่มีประสบการณ์จึงใช้งานJOINโดยเฉพาะ แต่น่าเสียดายที่เป็นลายลักษณ์อักษรนี่เป็นคำถาม SQL ที่บริสุทธิ์และเป็นเหยื่อล่อความคิดเห็น
วินซ์

คำตอบ:


4

ไม่มีความแตกต่างสำหรับทั้งสองคำสั่ง Postgresql แปลงทั้งสองเป็นแผนแบบสอบถามเดียวกัน คุณสามารถดูแผนได้โดยเพิ่มEXPLAIN ANALYZEก่อนเลือกและค้นหาผลลัพธ์


จะถือว่าเร็วกว่าอีกอันหนึ่งหรือไม่
Stophface

ต้องไม่ใช่ Postgresql แปลงทั้งสองเป็นแผนแบบสอบถามเดียวกัน คุณสามารถดูแผนได้โดยเพิ่มEXPLAIN ANALYZEก่อนเลือกและค้นหาผลลัพธ์
Roman Tkachuk

6
ฉันชอบ JOIN เพราะง่ายเกินไปที่จะลืมเงื่อนไขเมื่อผสมในที่ นอกจากนี้ด้วยวิธีการเข้าร่วมของ JOIN คุณสามารถใช้ LEFT เพื่อค้นหาจุดที่ไม่อยู่ในรูปร่างใด ๆ คุณไม่สามารถทำได้ด้วย WHERE
LR1234567
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.