2010-02-02 7 views
7

हमारी परियोजना MySQL डीबी की INNODB तालिका के अंदर पेड़-संरचना में विश्व डेटा बेस रखती है। पृथ्वी जड़ है, फिर देश, फिर देश के क्षेत्रों और स्थानों पत्तियां हैं।एक MySQL तालिका के अंदर विदेशी कुंजी और स्थानिक सूचकांक का उपयोग कैसे करें?

बच्चों की तेजी से पहुंच प्रदान करने के लिए एक विदेशी कुंजी का उपयोग किया जाता है (उदाहरण के लिए किसी क्षेत्र में शहरों)।

अब हम दिए गए निर्देशांक के लिए डेटा-बेस में एक तेज़ भू-खोज को कार्यान्वित करना चाहते हैं। स्पेशियल इंडेक्स का उपयोग करने के लिए एक स्पष्ट समाधान है, जो माईसाम टेबल की एक विशेषता है। लेकिन माईसाम टेबल विदेशी कुंजी का समर्थन नहीं करते हैं। और INNODB टेबल स्पेलेट इंडेक्स का समर्थन नहीं करते हैं।

तो अगर हम माईसाम टेबल का उपयोग करते हैं तो हमें विदेशी कुंजी छोड़नी होगी और इससे बच्चों को बहुत लंबा रास्ता मिल जाएगा।

हम कैसे पेड़ में तेजी से बच्चों की खोज को जोड़ सकते हैं और एक तालिका में एक स्थानिक इंडेक्स भी कर सकते हैं?

+0

ध्यान दें कि विदेशी कुंजी उद्देश्य क्वेरी को तेज नहीं करना है, लेकिन तालिकाओं के बीच संबंधों को लागू करना है। लुकअप को तेज करने वाला सूचकांक वह सूचकांक है जिसे आप विदेशी कुंजी के साथ एक साथ बनाएंगे। – Benjamin

उत्तर

4

कैसे हम तेजी से बच्चों पेड़ में खोज और यह भी एक तालिका में एक स्थानिक सूचकांक गठजोड़ कर सकते हैं?

id और मैन्युअल रूप से अपनी मेज की parentId सूचक बनाएँ:

CREATE INDEX ix_mytable_parentid ON mytable (parentid) 

ध्यान दें कि जब से id सबसे शायद एक PRIMARY KEY है, कोई स्पष्ट सूचकांक पर it (एक परोक्ष बनाया जाएगा) की आवश्यकता है।

BTW, यदि आपके पास प्राकृतिक भू-आधारित पदानुक्रम है, तो खोज के लिए अभिभावक-बाल संबंधों का उपयोग करने का क्या मतलब है?

SELECT * 
FROM mytable m1 
JOIN mytable m2 
ON  MBRContains (m2.area, m1.area) 
     AND m2.parentId = m1.id 
WHERE m1.name = 'London' 

जो और खोज के लिए स्थानिक सूचकांक ठीक छानने के लिए संबंध का उपयोग करेगा:

आप प्रश्नों SPATIAL अनुक्रमित उपयोग करने के लिए कर सकते हैं।

संबंधित मुद्दे