Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

MySQL 8 में बिंदु डेटाटाइप और st_distance_sphere का उपयोग करके निकटतम स्थान ढूँढना

यह हो सकता है सबसे अच्छा समाधान हो। आइए पहले कुछ अन्य उत्तर प्राप्त करें...

क्या करता है EXPLAIN SELECT ... कहो? (यह आपके प्रश्न 2 का उत्तर दे सकता है)।

आपकी क्वेरी अन्य उत्तरों की परवाह किए बिना संपूर्ण तालिका को स्कैन करेगी। शायद आप चाहते हैं LIMIT ... अंत में?

एक और चीज जो उपयोगी हो सकती है (आपके ऐप और ऑप्टिमाइज़र के आधार पर):WHERE में एक बाउंडिंग बॉक्स जोड़ें खंड।

किसी भी स्थिति में, वास्तव में कितनी पंक्तियों को छुआ गया है, इसका सटीक अनुभव प्राप्त करने के लिए निम्न कार्य करें:

FLUSH STATUS;
SELECT ...;
SHOW SESSION STATUS LIKE 'Handler%';

उन उत्तरों के साथ वापस आएं; तब शायद हम आगे पुनरावृति कर सकें।

स्थिति दिखाएं के बाद

खैर, Handler_read_rnd_next कहते हैं कि यह एक पूर्ण टेबल स्कैन था। 1000 और 1001 -- क्या आपके पास LIMIT 1000 है ?

मैं यह निष्कर्ष निकालता हूं कि LIMIT SPATIAL . के तरीके में शामिल नहीं है काम करता है। अर्थात्, यह सरल कार्य करता है - (1) सभी पंक्तियों की जाँच करें, (2) क्रमबद्ध करें, (3) LIMIT

तो, क्या करें?

योजना ए:तय करें कि आप एक्स मील (किमी) से अधिक दूर परिणाम नहीं चाहते हैं और क्वेरी में "बाउंडिंग बॉक्स" जोड़ें।

योजना बी:स्थानिक को त्यागें और कार्य को करने के लिए अधिक जटिल तरीके से खुदाई करें:http:// mysql.rjweb.org/doc.php/latlng




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. विंडोज़ पर रेल 3 के लिए mysql2 स्थापित नहीं कर सकता

  2. MySQL - उस तालिका में कैसे सम्मिलित करें जिसमें कई-से-अनेक संबंध हैं

  3. जाँच कर रहा है कि एक नुस्खा में एक घटक है - MYSQL

  4. wp_postmeta के संदर्भ इतने धीमे क्यों हैं?

  5. SQL त्रुटि मैं इसे समझ नहीं सकता