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

डेटाबेस:जियो लोकेशन डेटा को क्वेरी करने का सबसे अच्छा प्रदर्शन तरीका?

MySQL जियोलोकेशन परफॉर्मेंस पर एक अच्छा पेपर है यहां

संपादित करें बहुत यकीन है कि यह निश्चित त्रिज्या का उपयोग कर रहा है। इसके अलावा, मैं 100% निश्चित नहीं हूं कि दूरी की गणना के लिए एल्गोरिदम सबसे उन्नत है (यानी यह पृथ्वी के माध्यम से "ड्रिल" करेगा)।

महत्वपूर्ण बात यह है कि उचित दूरी की खोज करने के लिए आपको पंक्तियों की संख्या पर बॉल पार्क की सीमा देने के लिए एल्गोरिदम सस्ता है।

एल्गोरिथम उम्मीदवारों को स्रोत बिंदु के चारों ओर एक वर्ग में ले जाकर पूर्व-फ़िल्टर करता है, फिर मील में दूरी की गणना करता है ।

इसकी पूर्व-गणना करें, या स्रोत के सुझाव के अनुसार संग्रहीत कार्यविधि का उपयोग करें:

# Pseudo code
# user_lon and user_lat are the source longitude and latitude
# radius is the radius where you want to search
lon_distance = radius / abs(cos(radians(user_lat))*69);
min_lon = user_lon - lon_distance;
max_lon = user_lon + lon_distance;
min_lat = user_lat - (radius / 69);
max_lat = user_lat + (radius / 69);
SELECT dest.*,
  3956 * 2 * ASIN(
    SQRT(
      POWER(
        SIN(
          (user_lat - dest.lat) * pi() / 180 / 2
        ), 2
      ) + COS(
        user_lat * pi() / 180
      ) * COS(
        dest.lat * pi() / 180
      ) * POWER(
        SIN(
          (user_lon - dest.lon) * pi() / 180 / 2
        ), 2
      )
    )
  ) as distance
FROM dest
WHERE 
  dest.lon between min_lon and max_lon AND
  dest.lat between min_lat and max_lat
HAVING distance < radius
ORDER BY distance
LIMIT 10


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्या मुझे टेबल कॉलम में कोई डेटा नहीं दर्शाने के लिए NULL या खाली स्ट्रिंग का उपयोग करना चाहिए?

  2. PHP Mysql का उपयोग करके फॉर्म से दिनांक सम्मिलित करना

  3. MySQL में वर्जन स्ट्रिंग (x.y.z) की तुलना कैसे करें?

  4. ग्रुप बाय - न्यूल को ग्रुप न करें

  5. MySql:माता-पिता और बच्चे द्वारा आदेश