2011-06-16 10 views
6

के साथ एक बिंदु के त्रिज्या के भीतर अंक प्राप्त करने का सबसे प्रभावी तरीका मैं किसी दिए गए बिंदु के त्रिज्या के भीतर अंक प्राप्त करने के लिए सबसे कुशल क्वेरी को बाहर करने की कोशिश कर रहा हूं। परिणाम बहुत सटीक नहीं होने चाहिए इसलिए मैं सटीकता पर गति का पक्ष लेगा।एसक्यूएल सर्वर स्थानिक

हम उपयोग करने की कोशिश की है एक है, जहां यह (जहां @point और v.GeoPoint भूगोल प्रकार के होते हैं) की तरह STDistance का उपयोग कर अंक के खंड की तुलना दूरी:

WHERE v.GeoPoint.STDistance(@point) <= @radius 

इसके अलावा एक इस के समान STIntersects का उपयोग कर:

WHERE @point.STBuffer(@radius).STIntersects(v.GeoPoint) = 1 

इनमें से कोई भी प्रश्न प्राथमिकता है या क्या कोई अन्य कार्य है जिसे मैंने याद किया है?

उत्तर

3

तो सटीकता तो फ़िल्टर समारोह का उपयोग कर एक अच्छा विचार हो सकता सर्वोपरि नहीं है: http://msdn.microsoft.com/en-us/library/cc627367.aspx

यह मैं कई मामलों में तेजी से परिमाण के आदेश हो सकता है, क्योंकि यह जांच कर लें कि आपके मिलान सटीक था देखने के लिए नहीं करता है । सूचकांक में डेटा को ग्रिड पैटर्न में संग्रहीत किया जाता है, इसलिए यह दृष्टिकोण संभवतः आपके स्थानिक इंडेक्स विकल्पों पर निर्भर करता है।

इसके अलावा, यदि आपके पास कई मैचों की आवश्यकता नहीं है तो पहले फ़िल्टर करें, और फिर पूर्ण अंतरण करना व्यवहार्य हो सकता है।