मैं जानना चाहता हूं कि निम्न स्थितियों में से कौन सा उदाहरण मेरी स्थिति में रिकॉर्डसेट ऑब्जेक्ट को बंद करने के लिए सबसे अच्छा है?क्लासिक एएसपी - रिकॉर्डसेट को बंद करने के लिए
1)
यह एक पाश अंदर वस्तु बंद कर देता है, लेकिन एक नई वस्तु को खोलता है, जब यह अगले ले जाता है। यदि 1000 रिकॉर्ड थे, तो यह एक ऑब्जेक्ट 1000 बार खुलता है और इसे 1000 बार बंद करता है। यह वही है मैं सामान्य रूप से करना होगा है:
SQL = " ... "
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = " ... "
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write (...)
End If
rs2.Close : set rs2 = Nothing
rs1.MoveNext
Wend
rs1.Close : Set rs1 = Nothing
2)
यह उदाहरण है कि मैं क्या बारे में जानना चाहते है। लूप समाप्त होने के बाद ऑब्जेक्ट क्लोजर (rs2.close) को सहेजता है, लाभ प्राप्त करता है या प्रदर्शन को कम करता है? अगर 1000 के रिकॉर्ड थे, यह 1000 वस्तुओं खोलता था लेकिन केवल एक बार यह बंद कर देता है:
SQL = " ... "
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = " ... "
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write (...)
End If
rs1.MoveNext
Wend
rs1.Close : Set rs1 = Nothing
rs2.Close : set rs2 = Nothing
मुझे आशा है कि मैं अपने आप को काफी अच्छी तरह से समझाया है और यह भी बेवकूफ नहीं है।
अद्यतन
जो लोग सोचते हैं मेरी क्वेरी एन 1 मुद्दों (2 क्वेरी) से बचने के लिए संशोधित किया जा सकता करने के लिए, यहाँ यह है:
यह एक ऑनलाइन फोटो लाइब्रेरी के लिए है। मेरे पास दो टेबल हैं; "फोटोशर्च" और "फोटो"। पहला, "फोटोशर्च" में केवल कुछ कॉलम हैं और फ़ोटो के लिए सभी खोजे जाने योग्य डेटा हैं, जैसे "फोटोआईडी", "हेडलाइन", "कैप्शन", "लोग", "डेट कैप्चर" और "कीवर्ड"। इसमें एक बहु-स्तंभ पूर्ण-पाठ अनुक्रमणिका है (शीर्षक, कैप्शन, लोग, कीवर्ड)। दूसरी तालिका, "फोटो" में, सभी फोटो डेटा शामिल हैं; ऊंचाई, चौड़ाई, कॉपीराइट, कैप्शन, आईडी, तिथियां और बहुत कुछ। दोनों में 500 के + पंक्तियां हैं और शीर्षक और कैप्शन फ़ील्ड कभी-कभी 2000+ अक्षर लौटाते हैं।
यह लगभग है कि क्वेरी अब कैसे दिखती है: (ध्यान दें: मैं पूर्ण टेक्स्ट खोज के साथ जुड़ने का उपयोग नहीं कर सकता, इसलिए कीवर्ड को एक कॉलम में संग्रहीत किया जा रहा है - 'डी-सामान्यीकृत' तालिका में। इसके अलावा, इस तरह का छद्म मेरे ऐप कोड के रूप में कोड कहीं और है - लेकिन यह करीब है)
SQL = "SELECT photoID FROM photoSearch
WHERE MATCH (headline, caption, people, keywords)
AGAINST ('"&booleanSearchStr&"' IN BOOLEAN MODE)
AND dateCaptured BETWEEN '"&fromDate&"' AND '"&toDate&"' LIMIT 0,50;"
Set rs1 = conn.Execute(SQL)
While NOT rs1.EOF
SQL = "SELECT photoID, setID, eventID, locationID, headline, caption, instructions, dateCaptured, dateUploaded, status, uploaderID, thumbH, thumbW, previewH, previewW, + more FROM photos LEFT JOIN events AS e USING (eventID) LEFT JOIN location AS l USING (locationID) WHERE photoID = "&rs1.Fields("photoID")&";"
Set rs2 = conn.Execute(SQL)
If NOT rs2.EOF Then
Response.Write (.. photo data ..)
End If
rs2.Close
rs1.MoveNext
Wend
rs1.Close
है, जांच की अपनी ही मेज, "PhotoSearch" पर पूर्ण-पाठ सूचकांक होने, बड़ी मेज के बजाय, "फ़ोटो", सुधार करने के लिए लग रहा था कुछ हद तक गति। मैंने "फोटोशर्च" तालिका नहीं जोड़ा, यह पहले से ही था - यह मेरा ऐप नहीं है। यदि मैं दूसरी क्वेरी खोने के लिए दो तालिकाओं में शामिल होने का प्रयास करता हूं, तो मैं अपने इंडेक्सिंग को एक साथ खो देता हूं, जिसके परिणामस्वरूप बहुत लंबा समय होता है - इसलिए मैं पूर्ण-पाठ के साथ जुड़ने का उपयोग नहीं कर सकता। यह बस सबसे तेज विधि प्रतीत होता था। अगर यह पूर्ण पाठ और समस्याओं में शामिल होने के लिए नहीं था, तो मैं पहले से ही इन दोनों प्रश्नों को जोड़ता।
वाह! वह नई क्वेरी समझ में आता है और यह काम करता है। मैं MySQL वर्कबेंच में परीक्षण कर रहा हूं और यह बहुत तेज़ है। यह देखने के लिए कि क्या यह चीजों को गति देता है, मुझे इसे अपने ऐप में जोड़ना होगा। मेरा एक सवाल है; मैं इस प्रश्न में एक इंटर्न जॉइन कहां रखूंगा? इस तरह; बाएं जॉइन (फोटो लोग लोग पीपी इनरर पीपी.पीपलआईडी = पी। पीपलआईडीआईडी पर पीई के रूप में लोगों को शामिल करते हैं) पी.फोटोआईडी = पीपी.फोटोआईडी पर? – TheCarver
@PaparazzoKid आपको MySQL के साथ काम करते समय इनर जॉइन, बाएं जॉइन इत्यादि का उपयोग करने की आवश्यकता नहीं है। आप "," (अल्पविराम ऑपरेटर) और छद्म नामों के साथ कई तालिकाओं में शामिल हो सकते हैं। i.e: ("चुनें t1.name, t2.name से बहुत_long_table_name_table1 AS t1, very_long_table_name_table2 AS t2 जहां t1.id = t2.id") – htbasaran
ओह, उसने कार्यों में एक स्पैनर फेंक दिया। मैंने हमेशा MySQL के लिए बाएं, दाएं, जॉइन या इनर जॉइन का उपयोग किया है - मुझे इसके बारे में पढ़ने की आवश्यकता होगी। जिस कारण से मैंने LEFT का उपयोग किया था वह सारणी थी जिसे मैं शामिल करना चाहता हूं, हमेशा मिलान करने वाला रिकॉर्ड नहीं होगा। क्या यह आपकी विधि में समान होगा? – TheCarver