sql - ओरेकल 10 जी पहले से कनेक्ट-प्रदर्शन मुद्दे




oracle plsql (3)

क्या sire_animal_id और dam_animal_id पर अनुक्रमित हैं? यह पूरी मेज स्कैन कर रहा हो सकता है

मेरे पास निम्न SQL कथन है:

SELECT 
    CONNECT_BY_ROOT ANIMAL_ID "ORIGINAL_ANIMAL" ,
    ANIMAL_ID, LINE_ID, SIRE_ANIMAL_ID, DAM_ANIMAL_ID,
    LEVEL -1 "LEVEL" FROM ANIMALS 
START WITH ANIMAL_ID IN( '2360000002558' )
CONNECT BY
  ((PRIOR SIRE_ANIMAL_ID = ANIMAL_ID and LEVEL < 5) OR (PRIOR DAM_ANIMAL_ID = ANIMAL_ID AND LEVEL < 5))

यह लगभग 1.6 लाख जानवरों के साथ एक टेबल में है प्रत्येक रिकॉर्ड में Animal_Id, Sire_Animal_Id, और Dam_Animal_Id (पिता = पिता, बांध = माँ) है

मैं पूर्ण पशु वंश प्रदर्शित करने के लिए इस एसक्यूएल का उपयोग करता हूं परिणाम पशु, 2 अभिभावक, 4 दादा दादी, आदि दिखाएंगे।

मेरा मुद्दा यह है कि यह कथन एक जानवर के लिए 15 सेकंड लेता है। इस को अनुकूलित करने का एक तरीका होना चाहिए। कोई विचार?


हाँ, अनुक्रमित हैं।


मेरे पास यह परीक्षण करने के लिए बहुत समय नहीं था, इसलिए उत्तर में डाइर का थोड़ा सा है, लेकिन इनलाइन दृश्य सहायता का उपयोग करना होगा?

जैसा कि आपने एक स्पष्टीकरण योजना पोस्ट नहीं की है, मैं बहुत ज्यादा मदद नहीं कर सकता मैं डरता हूं और नीचे दिए गए समाधान में, आपको मिल सकता है कि आप के साथ क्लोन में संघ आपको प्रदर्शन के मुद्दों का कारण बनता है, लेकिन यह आपके रास्ते पर आपकी मदद कर सकता है उपाय।

WITH ani
  AS (SELECT animal_id, 
             line_id, 
             sire_animal_id, 
             dam_animal_id, 
             sire_animal_id AS generic_id
        FROM animals
      UNION
      SELECT animal_id, 
             line_id, 
             sire_animal_id, 
             dam_animal_id, 
             dam_animal_id AS generic_id
        FROM animals)
SELECT CONNECT_BY_ROOT animal_id "ORIGINAL_ANIMAL",
       animal_id,
       line_id,
       sire_animal_id,
       dam_animal_id,
       LEVEL - 1 "LEVEL"
  FROM ani
 START WITH animal_id = '2360000002558'
 CONNECT BY (PRIOR generic_id = animal_id AND LEVEL < 5 )




hierarchical-query