2009-07-29 17 views
6

कृपया मुझे एक MySQL क्वेरी में "इन क्लॉज" का उपयोग करने के अनुभव से बताएं, अच्छी प्रैक्टिस माना जाने के लिए धक्का देने के लिए सूची में बहुत बड़ा माना जाता है?इसे MySQL IN खंड में तारों का उपयोग करने के लिए बहुत अधिक माना जाता है?

उदाहरण परिदृश्य है कि मेरे पास उपयोगकर्ता आईडी संख्याओं की एक स्ट्रिंग है जो मैं एक कैश से खींचूंगा, यह इस सूची में 5,000 नंबर तक सभी नंबरों से कहीं भी हो सकती है और मैं एक mysql क्वेरी का उपयोग करूंगा इस सूची की तरह यह सूची;

SELECT column FROM table 
WHERE userid 
IN (2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20) 

क्या आप मुझे इस मुद्दे पर अपने विचार दे सकते हैं?

+0

आप क्या हासिल करने की कोशिश कर रहे हैं के अनुसार 5.0 में 1GB की एक सीमा के साथ विन्यास योग्य है? हो सकता है कि आपको दिखाए गए प्रश्न के बजाय आपको शामिल होना चाहिए? – maciejkow

+1

मुझे लगता है कि यह एक विशिष्ट प्रश्न है जो विशिष्ट क्वेरी को अनदेखा कर रहा है। मैं क्वेरी को हटाने और "सूची में बहुत अधिक आइटम कब हैं" के प्रश्न को बनाए रखने के लिए @ jasondavis की अनुशंसा करता हूं। –

+0

@ रैक्स ओल्गुड मैंने – JasonDavis

उत्तर

0

की तरह कुछ जब तक आपके userid रूप क्षेत्र अनुक्रमित की गई है, एक अच्छा विकल्प की तरह लगता है।

वैसे भी, असली सवाल यहां कुछ अन्य विकल्पों के खिलाफ आईएन के प्रदर्शन की तुलना करेगा। यदि आपका डेटा प्राप्त करने का यही एकमात्र तरीका है, तो आप इसके बारे में बहुत कुछ नहीं कर सकते हैं

0

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

आपकी टेबल संरचना क्या है, मुझे लगता है कि आपके पास मित्र संबंधों को संग्रहित करने वाली एक टेबल है, क्या आप इसके बजाय उसमें शामिल नहीं हो सकते?

SELECT * --you columns 
FROM FriendLinks fl 
Inner JOIN Users u on fl.friendid = u.id 
WHERE u.id = <your id> 

या कि

+0

अपडेट किया है, मैं एक साल से अधिक समय के लिए अलग-अलग जुड़ने और तरीकों के साथ प्रयोग कर रहा हूं, मेरे परिणाम अगर उपयोगकर्ताओं को 1,000 से कम दोस्तों की तरह है, तो आईएन क्लॉज तेजी से काम करता है और ऐसा लगता है कि यह तेजी से काम करता है एक जॉइन के साथ लेकिन अब मेरी साइट उन चीजों का उपयोग शुरू कर रही है जिनमें पहले से ही 2-3 शामिल हैं इसलिए मैं दोस्त को उनके साथ जुड़ना नहीं चाहता था। इसके अलावा एक और कारण जल्द ही मैं memcache में मित्र सूची को कैश कर रहा हूं या फ़ाइल कैश में एक सरणी के रूप में, इसलिए एक बार यह कैश हो जाने पर मैं शामिल होने का उपयोग नहीं कर सकता? – JasonDavis

2

यह ध्यान दिया जाना चाहिए कि कुछ डेटाबेस में आईएन क्लॉज के भीतर प्रविष्टियों की संख्या पर सीमा होती है - ओरेकल संस्करण < = 10 1000 तक सीमित है मैं v11 के बारे में निश्चित नहीं हूँ।

+0

जानना अच्छा है मुझे आश्चर्य है कि क्या mysql की सीमा है – JasonDavis

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