मुझे आईडी की एक बड़ी सूची को पुनः प्राप्त करने के लिए एक प्रश्न लिखने की आवश्यकता है।
हम कई बैकएंड (MySQL, Firebird, SQLServer, Oracle, PostgreSQL ...) का समर्थन करते हैं, इसलिए मुझे एक मानक SQL लिखने की आवश्यकता है।
आईडी सेट का आकार बड़ा हो सकता है, क्वेरी प्रोग्रामेटिक रूप से उत्पन्न होगी। तो, सबसे अच्छा तरीका क्या है?
1) IN का उपयोग करके एक क्वेरी लिखना
SELECT * FROM TABLE WHERE ID IN (id1, id2, ..., idn)
मेरा सवाल यहाँ है यदि n बहुत बड़ा है तो क्या होता है? इसके अलावा, प्रदर्शन के बारे में क्या?
2) OR का उपयोग करके एक क्वेरी लिखना
SELECT * FROM TABLE WHERE ID = id1 OR ID = id2 OR ... OR ID = idn
मुझे लगता है कि इस दृष्टिकोण की n सीमा नहीं है, लेकिन अगर n बहुत बड़ा है तो प्रदर्शन के बारे में क्या होगा?
3) एक प्रोग्रामेटिक समाधान लिखना:
foreach (var id in myIdList)
{
var item = GetItemByQuery("SELECT * FROM TABLE WHERE ID = " + id);
myObjectList.Add(item);
}
हमें इस दृष्टिकोण के साथ कुछ समस्याओं का अनुभव हुआ जब डेटाबेस सर्वर नेटवर्क पर क्वियर होता है। आम तौर पर एक प्रश्न करना बेहतर होता है जो सभी परिणामों को पुनः प्राप्त करता है बनाम बहुत सारे छोटे प्रश्न बनाता है। शायद मैं गलत हूँ।
इस समस्या का एक सही समाधान क्या होगा?
IN
! मैंने आपका समाधान 1 + 3 के रूप में किया था। बस अंतिम क्वेरी एक थी, जिसे निष्पादित करने के लिए एसक्यूएल को लंबी क्वेरी स्ट्रिंग भेजा गया था।