2015-05-12 11 views
6

द्वारा हाइबरनेट मानदंड 20 लाख से अधिक पंक्तियों के साथ एक MySQL तालिका होने के साथ, अक्षांश और देशांतर के निकटतम पंक्तियां प्राप्त करने के लिए हाइबरनेट के साथ मानदंड बनाने के लिए कुछ तरीका है?अक्षांश और देशांतर

Criteria का उपयोग करना बहुत अच्छा होगा क्योंकि मुझे अधिक फ़िल्टर (मूल्य, श्रेणी, आदि) का उपयोग करने की आवश्यकता है।

अंत में, यह दूरी से आदेशित पंक्तियों को प्राप्त करने योग्य है? या बहुत अधिक पंक्तियां हैं?

उत्तर

1

योजना पंक्तियों की एक बड़ी संख्या के साथ, INDEX(lat) है एक गैर स्टार्टर, प्रदर्शन के लिहाज से, भी एक पट्टी करने के लिए सीमित के साथ: AND lat BETWEEN 65 AND 69INDEX(lat, lng) कोई बेहतर क्योंकि अनुकूलक भी AND lng BETWEEN...

प्लान बी के साथ, दोनों स्तंभों का उपयोग नहीं होता आपका अगला चुनाव अक्षां और एलएनजी के अलावा एक सबक्वेरी शामिल होगी है। और संस्करण 5.6 फायदेमंद होगा। यह (INDEX(lat, lng, id) सहित के बाद) कुछ इस तरह है:

SELECT ... FROM (
    SELECT id FROM tbl 
     WHERE lat BETWEEN... 
      AND lng BETWEEN...) x 
    JOIN tbl USING (id) 
    WHERE ...; 

विभिन्न कारणों से, प्लान बी केवल थोड़ा योजना ए की तुलना में बेहतर

योजना C पंक्तियों के लाखों लोगों के साथ, आप my pizza parlor algorithm की आवश्यकता होगी । इसमें पर्याप्त पंक्तियों की तलाश में तालिका को बार-बार जांचने के लिए संग्रहीत प्रक्रिया शामिल है। इसमें कच्चे 2 डी इंडेक्स प्राप्त करने के लिए पार्टिविजनिंग भी शामिल है। लिंक में संदर्भ कोड है जिसमें श्रेणी जैसी चीज़ों पर फ़िल्टरिंग शामिल है।

योजना ए और बी ओ (वर्ग (एन)) हैं; योजना सी ओ (1) है। प्लान ए और बी के लिए, यदि आप पंक्तियों की संख्या चौगुनी करते हैं, आप समय निकालते हैं। प्लान सी को धीमा नहीं मिलता है क्योंकि आप एन

बढ़ाते हैं
संबंधित मुद्दे