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

ST_Dभीतर कभी-कभी अनुक्रमणिका का उपयोग नहीं करता

ST_DWithin प्रलेखन में कहा गया है कि पहला फ़ंक्शन हस्ताक्षर भूगोल के प्रकारों को स्वीकार करता है न कि ज्यामिति के प्रकारों को:

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

चूंकि (स्थान, ST_SetSRID (ST_MakePoint (20, -30), 4326)) सभी ज्यामिति हैं, यह समझ में आता है कि फ़ंक्शन का निष्पादन गड़बड़ है। और मुझे लगता है कि आपका दूसरा फ़ंक्शन ठीक से काम कर रहा था क्योंकि आप जो निष्पादित कर रहे थे वह यह हस्ताक्षर था :

boolean ST_DWithin(geometry g1, geometry g2, double precision distance_of_srid);

और जैसा कि आपने कहा था कि कॉलम प्रकारों को ज्यामिति के बजाय भूगोल में बदलने से समस्या हल हो जाएगी क्योंकि इससे आपको इसका सही निष्पादन मिलेगा:

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters);

boolean ST_DWithin(geography gg1, geography gg2, double precision distance_meters, boolean use_spheroid);

आशा है कि इससे थोड़ी मदद मिलेगी।

संपादित करें:

यह भाग दस्तावेज़ीकरण में मिला जो बताता है कि डेटा प्रविष्टि पर

यह समझा सकता है कि पोस्टग्रेज़ ने ST_DWithin() के आपके पहले आह्वान को क्यों स्वीकार किया क्योंकि पोस्टगिस जाहिर तौर पर इसे भूगोल में डाल देगा, और यह भी बताता है कि निष्पादन में अधिक समय क्यों लगता है और सूचकांक की उपेक्षा करता है क्योंकि प्रत्येक कास्टिंग के परिणामस्वरूप एक नई वस्तु होगी जो अनुक्रमित नहीं है आपका मूल कॉलम।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostGIS संस्करण प्राप्त करें

  2. PostgreSQL पंक्ति लॉक पढ़ें

  3. पोस्टग्रेज:सभी तालिकाओं के लिए प्राथमिक कुंजी अनुक्रम अपडेट करें

  4. Django में स्कीमा का उपयोग कैसे करें?

  5. Doctrine2 आईडी कॉलम (पोस्टग्रेज) के लिए अनुक्रम को डिफ़ॉल्ट पर सेट नहीं करता है