समूहवार अधिकतम काम करने की गारंटी नहीं है। वास्तव में, मारियाडीबी ने इसे तोड़ दिया, लेकिन इसे वापस पाने के लिए एक सेटिंग प्रदान की। मैं इसका जिक्र कर रहा हूं:
SELECT *
FROM
( SELECT ... ORDER BY ... )
GROUP BY ...
जहां आप आंतरिक क्वेरी से प्रत्येक समूह में पहला (या अंतिम) चाहते हैं। समस्या यह है कि SQL उस आशय को दूर करने के लिए अनुकूलित करने के लिए स्वतंत्र है।
डॉक्स में समूहवार अधिकतम कोड बहुत ही अक्षम है।
क्वेरी को तेज़ करने के लिए, Rules
. को अलग करने में मदद की एक संभावित बिट है या Places
WHERE क्लॉज का हिस्सा और इसे एक सबक्वायरी में बनाएं जो संबंधित टेबल की सिर्फ PRIMARY KEY देता है। फिर उसे सभी टेबलों के साथ जॉइन में डालें (उसी टेबल पर वापस जॉइन सहित)। उस सबक्वेरी के लिए आपके पास पहले से ही एक "कवरिंग इंडेक्स" है ताकि यह "इंडेक्स का उपयोग" (EXPLAIN द्वारा इस्तेमाल किए गए शब्दजाल में) हो सके।
क्या innodb_buffer_pool_size उपलब्ध RAM के लगभग 70% पर सेट है?
बिगिनट 8 बाइट्स लेता है; आप शायद MEDIUMINT UNSIGNED (0..16M) के साथ रह सकते हैं। छोटा -> अधिक कैश करने योग्य -> कम I/O -> तेज।
lat/lng के लिए DOUBLE की जोड़ी 16 बाइट्स लेती है। एक FLOAT जोड़ी 8 बाइट्स लेती है और इसमें 6-फुट / 2m रिज़ॉल्यूशन होता है। या DECIMAL(6,4) अक्षांश के लिए और (7,4) देशांतर के लिए 7 बाइट्स और एक 52 फुट/16m रिज़ॉल्यूशन के लिए। "स्टोर" के लिए काफी अच्छा है, खासकर जब से आप दूरी के लिए 'सर्कल' के बजाय 'स्क्वायर' का उपयोग कर रहे हैं।
"निकटतम खोजें ..." के लिए कोड को अनुकूलित करना कठिन है। यहां सबसे अच्छा मैंने दिया है:http://mysql.rjweb.org/doc .php/latlng