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

 

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

Ύπαρξη του Inner Join

Îåêßíçóå áðü ôï ìÝëïò gspiros. Τελευταία δημοσίευση από το μέλος George J. Capnias στις 22-02-2009, 19:15. Υπάρχουν 3 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  21-02-2009, 20:52 48596

    Ύπαρξη του Inner Join

    Έχω τα 2 παρακάτω queries:

    select territories.territoryid, region.regionid from territories inner join region on territories.regionid=region.regionid
    select territoryid, (select regionid from region where region.regionid=territories.regionid) as regionid from territories

    Προκύπτουν οι ίδιοι πίνακες!
    Γιατί υπάρχει το Inner join, αφου την δουλειά του μπορούμε να την κάνουμε και αλλιώς?
    Δημοσίευση στην κατηγορία:
  •  21-02-2009, 22:26 48598 σε απάντηση της 48596

    Απ: Ύπαρξη του Inner Join

    Το ερώτημά σου έχει ταλαιπωρήσει πολλούς developers σε πολλά συστήματα βάσεων δεδομένων και επί πολλά χρόνια! Ειναι το γνωστό "joins vs subqueries", για το οποίο δεν υπάρχει, δυστυχώς, μια και μόνο μία απάντηση. Εξαρτάται από αρκετές παραμέτρους και απαντάται κατά περίπτωση.

    Ομως, οι απαντήσεις δεν έχουν να κάνουν με το αποτέλεσμα (που φυσικά και είναι ίδιο και στις δύο περιπτώσεις) αλλά με τις επιδόσεις του συστήματος. Ητοι, τελικά ποιό είναι πιό γρήγορο;

    Στην περίπτωση που αναφέρεις, είναι σχετικά εύκολο να υποθέσουμε οτι ένα join θα ήταν πιό γρήγορο από ένα subquery, μια και το join "ενώνει" τους πίνακες σε ένα πέρασμα, ενώ το subquery σου θα τρέξει μια φορά για κάθε γραμμή του πίνακα territories. Ητοι, αν ο πίνακας έχει χιλιάδες γραμμές, το subquery θα τρέξει χιλιάδες φορές.



    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  22-02-2009, 16:35 48614 σε απάντηση της 48596

    Απ: Ύπαρξη του Inner Join

     

    είναι αιώνιο ερώτημα που λέει και ο σωτήρης....

    από προσωπική εμπειρία λέω ότι γενικά προτίμησε joins σε σχέση με subqueries.

    τα subqueries πρέπει να εκτελούνται πρώτα. και μετά το Outer query. βασικά εκτελείς 2 ερωτήματα αντί για ένα, όπως όταν έχεις Join.

    τα Joins χρησιμοποιούνε και κάνουνε καλύτερο Utilize του Index. αν ο πίνακας σου είναι Indexed στην στήλη-πεδίο που γίνεται το Join, τότε θα έχεις ένα καλό performance.

    Και φυσικά από readiblity point of view, μπορείς να διαβάσεις καλύτερα ένα Join από ένα subquery.

    φυσικά δεν τον παρακάνουμε με τα joins. το να έχεις ενα gridview το οποίο τραβάει data από ένα view που είναι το Join 57 Πινάκων , μάλλον θα έχεις πολλά προβλήματα στο performance, ειδικά αν τα δεδομένα είναι πολλά.


    Νικόλαος Καντζέλης
    BSc, MSc, MCAS, MCPD, MCITP, MCTS,MCP, MCT
    http://www.nksolutions.gr
    http://dotnetstories.wordpress.com
    http://weblogs.asp.net/dotnetstories
    http://forum.dotnetnuke.gr
  •  22-02-2009, 19:15 48623 σε απάντηση της 48596

    Απ: Ύπαρξη του Inner Join

    gspiros:
    Έχω τα 2 παρακάτω queries:

    select territories.territoryid, region.regionid from territories inner join region on territories.regionid=region.regionid
    select territoryid, (select regionid from region where region.regionid=territories.regionid) as regionid from territories

    Προκύπτουν οι ίδιοι πίνακες!
    Γιατί υπάρχει το Inner join, αφου την δουλειά του μπορούμε να την κάνουμε και αλλιώς?

    Η αλήθεια, είναι ότι προκύπτουν οι ίδιοι πίνακες αν ο server που τρέχει το ερώτημα είναι ο SQL Server, που είναι διάσημος για το auto-optimization που διαθέτει.

    Να είσαι σίγουρος ότι τα ερωτήματα μπορούν να επιστρέψουν διαφορετικά αποτελέσματα, αν πχ ο server είναι Oracle ή MySql. Η χρήση του Inner Join θα κάνει πιο γρήγορη αναζήτηση, αν όμως υπάρχουν nulls μέσα στα αποτελέσματα που θα πάρεις, το ένα-προς-ένα "πάει περίπατο" και έχεις cross-table αποτελέσματα.

    Σε αυτή την περίπτωση η χρήση της δεύτερης σύνταξης είναι επιτακτική...

     

    George J.


    George J. Capnias: Χειροπρακτικός Υπολογιστών, Ύψιστος Γκουράρχης της Κουμπουτερολογίας
    w: capnias.org, t: @gcapnias, l: gr.linkedin.com/in/gcapnias
    dotNETZone.gr News
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems