Oracle
 sql >> डेटाबेस >  >> RDS >> Oracle

Oracle 10g Connect By पहले - प्रदर्शन संबंधी समस्याएं

मैंने आपकी स्थिति को फिर से बनाने की कोशिश की और मैं ओरेकल को इंडेक्स का बुद्धिमानी से उपयोग करने में सक्षम नहीं था। मुझे यकीन है कि ऐसा करने का कुछ स्मार्ट तरीका है। लेकिन अगर कोई और यहां इसका पता नहीं लगा सकता है, तो नीचे गूंगा, बदसूरत तरीका है।

चूंकि आपको केवल एक निश्चित संख्या में स्तर मिल रहे हैं, इसलिए आप मैन्युअल रूप से एक कनेक्ट बना सकते हैं। पहला स्तर प्राप्त करें, दूसरे स्तर पर संघ (जो पहली क्वेरी की एक प्रति से परिणाम प्राप्त करता है), संघ कि तीसरे स्तर पर (जो दूसरी क्वेरी की एक प्रति से परिणाम प्राप्त करता है), आदि। मैंने केवल तीन स्तर किए यहां, लेकिन आप चौथा बनाने के लिए कॉपी और पेस्ट कर सकते हैं। इसका उपयोग करना कठिन है क्योंकि मूल आईडी को कई बार दोहराया जाता है, लेकिन यह बहुत तेज़ है (मेरी मशीन पर 1.6 मिलियन रिकॉर्ड के साथ 0.005 सेकंड।)

--Original animal
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 0 "level" from animals where animal_id = '101'
union all
--Parents
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 1 "level" from animals
where animal_id = (select sire_animal_id from animals where animal_id = '101')
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 1 "level" from animals
where animal_id = (select dam_animal_id from animals where animal_id = '101')
union all
--Grand parents
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select sire_animal_id from animals
  where animal_id = (select sire_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select dam_animal_id from animals
  where animal_id = (select sire_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select sire_animal_id from animals
  where animal_id = (select dam_animal_id from animals where animal_id = '101')
)
union all
select '101' original_animal, animal_id, line_id, sire_animal_id, dam_animal_id, 2 "level" from animals
where animal_id =
(
  select dam_animal_id from animals
  where animal_id = (select dam_animal_id from animals where animal_id = '101')
);


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Oracle एपेक्स 20.1 त्रुटि:सत्यापन प्रक्रिया में त्रुटि

  2. Oracle में एक तालिका में अनुक्रम अंतराल ढूँढना

  3. ORA-29913:ODCIEXTTABLEOPEN कॉलआउट निष्पादित करने में त्रुटि

  4. DML और एक्सेप्शन हैंडलिंग - Oracle

  5. Oracle:VARCHAR2 कॉलम को CLOB में बदलना