आपको पॉइंट्स को डेटाटाइप Point
. के सिंगल कॉलम में स्टोर करना चाहिए जिसे आप SPATIAL
. के साथ अनुक्रमित कर सकते हैं अनुक्रमणिका (यदि आपकी तालिका का प्रकार MyISAM
. है ):
CREATE SPATIAL INDEX sx_place_location ON place (location)
SELECT *
FROM mytable
WHERE MBRContains
(
LineString
(
Point($x - $radius, $y - $radius),
Point($x + $radius, $y + $radius)
)
location
)
AND Distance(Point($x, $y), location) <= $radius
यह "किसी दिए गए दायरे में सभी खोजें" जैसी क्वेरी की गति में अत्यधिक सुधार करेगा।
ध्यान दें कि सादा TM
का उपयोग करना बेहतर है ध्रुवीय (अक्षांश और देशांतर) के बजाय मीट्रिक निर्देशांक (पूर्व की ओर और उत्तर की ओर)। छोटे रेडी के लिए, वे काफी सटीक होते हैं, और गणना को बहुत सरल किया जाता है। यदि आपके सभी बिंदु एक गोलार्द्ध में हैं और ध्रुवों से दूर हैं, तो आप एकल केंद्रीय मध्याह्न रेखा का उपयोग कर सकते हैं।
बेशक आप अभी भी ध्रुवीय निर्देशांक का उपयोग कर सकते हैं, लेकिन MBR
. की गणना के लिए सूत्र और दूरी अधिक जटिल होगी।