जबकि आपके तर्क और उपरोक्त समाधान छोटे पैमाने के लिए अच्छे हैं, यदि आप 65000 से अधिक वस्तुओं के बारे में बात कर रहे हैं, तो आपको एक ऐसे समाधान की आवश्यकता है जो मापनीय हो।
मेरा सुझाव है कि इस कार्य को 2 चरणों में विभाजित किया जाए।
चरण 1
एक अस्थायी तालिका बनाएं, इस अस्थायी तालिका में न्यूनतम 3 कॉलम होंगे
TEMP_ITEM_ORDER_TABLE (
session_key varchar2(50),
item_id number,
item_report_order number
)
हर बार जब उपयोगकर्ता इस तरह की क्वेरी का आदेश देता है, तो उपयोगकर्ता सत्र (संभवतः उपयोगकर्ता आईडी या सत्र आईडी) की पहचान करने के लिए कुछ अद्वितीय कुंजी के साथ इस अस्थायी तालिका में डेटा, यानी आइटम आईडी और उनका अनुक्रम संख्या डालें। यह तरकीब आइटम सूचियों के टकराव से बचने के लिए है जब कई उपयोगकर्ता एक साथ रिपोर्ट को आग लगाते हैं।
चरण 2
अब अपनी मुख्य तालिका, अस्थायी तालिका को session_key
. के साथ जोड़कर अपनी रिपोर्ट क्वेरी को सक्रिय करें . आपके इनपुट ऑर्डर के आधार पर क्वेरी ऑर्डर डेटा में (पहले से ही अस्थायी तालिका में संग्रहीत)
SELECT
T1.* , T2.item_report_order
FROM ITEM T1, TEMP_ITEM_ORDER_TABLE T2
WHERE T1.ITEM_ID = T2.ITEM_ID
AND T2.session_key = :input_session_key
ORDER BY t2.item_report_order
यह तरीका है
- डेटाबेस अज्ञेयवादी
- किसी भी संख्या में इनपुट के साथ स्केलेबल
- सर्वश्रेष्ठ संभव प्रदर्शन देता है
नोट:क्वेरी प्रदर्शन को और बेहतर बनाने के लिए, session_key पर अनुक्रमणिका बनाएं, अस्थायी तालिका में item_id भी ITEM तालिका पर item_id पर अनुक्रमणिका बनाएं (यदि पहले से मौजूद नहीं है)
संपादित करें:Oracle ऑफ़र करता है वैश्विक अस्थायी तालिका सुविधा, जो बनाता है केवल सत्र में रिकॉर्ड की अनुमति देने के लिए और सत्र के कम/समाप्ति आदि पर स्वत:सफाई की अनुमति देता है। आप इस सुविधा का उपयोग कर सकते हैं और सत्र कुंजी से बच सकते हैं, लेकिन इस समाधान को अन्य डेटाबेस उत्पादों पर तब तक दोहराया नहीं जा सकता जब तक कि वे समान सुविधा का समर्थन करें।