आप जो देख रहे हैं, दुर्भाग्य से, MySQL में स्थानिक कार्यों को लागू करने के तरीके के साथ एक सामान्य समस्या है और स्थानिक कार्यों से जुड़े उपश्रेणियों के साथ एक संबंधित कमजोरी है।
कंटेन्स और इंटरसेक्ट फ़ंक्शन ठीक से काम करें, और इंडेक्स का उपयोग करने के लिए, आपको ज्यामिति में से एक स्थिर होना चाहिए। यह प्रलेखित प्रतीत नहीं होता है, हालांकि आप MySQL के साथ Intersects/Contains के साथ जो सभी उदाहरण देखेंगे, वे इस तरह से काम करते हैं।
इसलिए, आप ऐसा कुछ नहीं लिख सकते, जैसा कि आप Oracle Spatial या Postgis में लिख सकते हैं,
select a.*, b.*
from sometable a, someothertable b
where ST_Intersects(a.geom, b.geom)
and a.someattribute=... and b.someattribute=...;
ऐसी क्वेरी में, यदि टेबल ए और बी दोनों में स्थानिक सूचकांक हैं, तो उनका उपयोग किया जाएगा, बशर्ते यह किसी अन्य विशेषता की तुलना में अधिक प्रतिबंधात्मक हो, जहां आप क्लॉज में डाल सकते हैं।
वही सेल्फ़ जॉइन के लिए लागू होता है, जहाँ आप सभी पॉलीगॉन को खोजना चाहते हैं जो किसी विशेषता के आधार पर तालिका में अन्य सभी पॉलीगॉन के साथ प्रतिच्छेद करते हैं, जैसे,
select a.*
from sometable a, sometable b
where ST_Intersects(a.geom, b.geom) ....
तो, MySQL स्थानिक में आपको एक ज्यामिति स्थिर रखने के लिए मजबूर किया जाता है।
एक तरफ के रूप में, लेफ्ट जॉइन सिंटैक्स स्थानिक (हालांकि यह समर्थित है) के साथ ज्यादा समझ में नहीं आता है, क्योंकि आप वास्तव में एक मिलान वाली विशेषता में शामिल नहीं हो रहे हैं, लेकिन 2-आयामी रोकथाम/चौराहे ऑपरेटर पर।
साथ ही, मुझे पूरा यकीन है कि यदि आप key
देखते हैं, तो आपके आंतरिक जुड़ाव पर अनुक्रमणिका का उपयोग नहीं किया जा रहा है। और rows
व्याख्या का आउटपुट।