Καλώς ορίσατε στο dotNETZone.gr - Σύνδεση | Εγγραφή | Βοήθεια
σε

 

Αρχική σελίδα Ιστολόγια Συζητήσεις Εκθέσεις Φωτογραφιών Αρχειοθήκες

OR ή UNION σε MySQL

Îåêßíçóå áðü ôï ìÝëïò basilis. Τελευταία δημοσίευση από το μέλος basilis στις 15-08-2007, 21:16. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  14-08-2007, 17:15 34313

    OR ή UNION σε MySQL

    Καλησπέρα θα ήθελα τη γνώμη σας για το παρακάτω MySQL statement.

    επειδή ο πίνακας rfq_cat1 έχει πάραπολλές γραμμές με ενδιαφέρει η μέγιστη απόδοση. Γι αυτό κάτω από κάθε statement σας δίνω και το explain.


    SELECT * FROM rfq_cat1 where (region = 0) limit 0,4
    UNION ALL
    (SELECT * FROM rfq_cat1 where (region = 10 AND country = 0) limit 0,4)
    UNION ALL
    (SELECT * FROM rfq_cat1 where (region = 10 AND country = 919) limit 0,4);


    id select_type table  type possible_keys Key  Key_len ref  rows Extra

    1 PRIMARY  rfq_cat1 ref RegionCountry_1 RegionCountry_1 1 const  1 Using where 
    2 UNION  rfq_cat1 ref RegionCountry_1 RegionCountry_1 3 const,const 1 Using where 
    3 UNION  rfq_cat1 ref RegionCountry_1 RegionCountry_1 3 const,const 1 Using where 
    NULL UNION RESULT <union1,2,3> ALL NULL  NULL  NULL NULL  NULL 

     

    SELECT *
    FROM rfq_cat1 FORCE INDEX (RegionCountry_1)
    where (region = 0) OR (region = 10 AND country = 0) OR (region = 10 AND country = 919)
    limit 0,10;


    id select_type table  type possible_keys Key  Key_len ref  rows Extra

    1 SIMPLE  rfq_cat1 range RegionCountry_1 RegionCountry_1 3 NULL  3 Using where

     


    το index είναι περιλαμβάνει το region,country...

    Θέλω να ξέρω αν είναι πιο αποδοτικό το να χρησιμοποιήσω unions ή OR...


    Ευχαριστώ προκαταβολικά. 

  •  14-08-2007, 17:20 34314 σε απάντηση της 34313

    Απ: OR ή UNION σε MySQL

    Αντί να σου απαντήσω θα σου προτίνω το εξής.
    Φτιάξε ένα script που θα δημιουργεί dummy data πολύ μεγάλου αριθμού, κάντα Insert στη βάση σου και μετά δοκίμασε μόνος σου. Ετσι και την απάντηση θα βρεις, αλλά και θα σου δωθεί το εναυσμα να δοκιμάσεις για περισσότερη βελτιστοποίηση.

    Γιώργος Σακαλής
  •  14-08-2007, 17:44 34315 σε απάντηση της 34314

    Απ: OR ή UNION σε MySQL

    Σκέψου το εξής. Όταν χρησιμοποιείς UNION η βάση εκτελεί από μία φορά όλα τα query από τα οποία αποτελείται το UNION, τα σορτάρει και αφαιρεί τα διπλά. Όταν βάζεις OR, η βάση εκτελεί ένα και μοναδικό query και σου γυρίζει αμέσως τα αποτελέσματα.

    Δεν ξέρω πόσο έξυπνος είναι ο query optimizer του MySQL αλλά έχει περάσει εδώ και πολύ καιρό (10 χρόνια+) η εποχή που οι βάσεις υλοποιούσαν το OR κάνοντας UNION.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  15-08-2007, 21:16 34349 σε απάντηση της 34315

    Απ: OR ή UNION σε MySQL

    Πρόσθεσα περίπου 100.000 εγγραφές και με χρήση πολλών OR και UNIONS σε κάθε sql statement αντίστοιχα βρήκα ότι το OR είναι ελάχιστα πιο γρήγορο. Ευχαριστώ και τους 2 σας για τα tips.

Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems