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

 

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

SQL Performance

Îåêßíçóå áðü ôï ìÝëïò Bill . Τελευταία δημοσίευση από το μέλος Bill στις 17-11-2009, 22:48. Υπάρχουν 7 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  17-11-2009, 16:10 55234

    SQL Performance

     Ερώτηση θεωρητική Έστω ότι έχω ένα View το οποίο μέσα έχει πολλά joins τα οποία είναι ιδιοι οι πίνακες κάθε φορά αλλά αλλάζει ο το φίλτρο με τα ids τους Αν λέω αν κάνω ένα function με όρισμα τα ids να μου επιστρέφει το επιθυμιτό ποσό κάθε φορά και απλά βάλω στο select μου τα πεδία που θα επιστρέφει η function κάθε φορά . Θα μου βελτίωνε την ταχύτητα ?

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  17-11-2009, 16:15 55235 σε απάντηση της 55234

    Απ: SQL Performance

    Μπορείς να ξαναγράψεις την ερώτηση σε πιο κατανοητή μορφή?
    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  17-11-2009, 16:42 55237 σε απάντηση της 55235

    Απ: SQL Performance

     Οκ
    πχ
     Select
       t1.poso a
      ,t2.poso b
      ,t3.poso c
      ,t4.poso d
        .
        .
        .
     ,tn.poso as n  
     FROM myTable  m
     LEFT JOIN  table1 t1 on t1.id = m.id  AND t1.id_number = 12
     LEFT JOIN  table1 t2 on t2.id = m.id  AND t2.id_number in(14,13,4,6,7,8)
     LEFT JOIN  table1 t3 on t3.id = m.id  AND t3.id_number in(88,33,434)
     LEFT JOIN  table1 t4 on t4.id = m.id  AND t4.id_number = 29
     .
     .
     .
     .
     .
     .
    LEFT JOIN  table1 tn on tn.id = m.id  AND tn.id_number = 100

    Περίπου έτσι είναι και ρωτάω πως  για να το βελτιώσω σκέφτηκα να κάνω μια function που θα κάνει ένα join και θα δέχεται παράμετρο τα φίλτρα κάθε φορά τα οποία θέλω ή δεν θα παίζει ρόλο στο performance ?




    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  17-11-2009, 20:16 55244 σε απάντηση της 55237

    Απ: SQL Performance


    το θέμα του Perfromance είναι πολύ μεγάλο και πρέπει κάποιος να ξέρει όλα τα δεδομένα.... (big picture)

    γενικά σε Blogs διαβάζω ότι υπάρχουνε κάποια θέματα με τις UDFs και πως τις κάνει handle o sql server query optimiser. αυτό που ισχύει είναι ότι αν πας σε UDF λύση , δεν σημαίνει ότι θα έχες όπως και να έχει performance gain

    για δες εδώ

    http://www.sql-server-performance.com/articles/per/sql_server_udfs_p1.aspx

    Νικόλαος Καντζέλης
    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
  •  17-11-2009, 20:48 55245 σε απάντηση της 55237

    Απ: SQL Performance

    Δεν κατάλαβα πως θα κάνεις μόνο ένα join μέσα στο UDF. Και αν έστω το κάνεις, μετά δεν θα πρέπει το αποτέλεσμα του να το κάνεις join με τα υπόλοιπα data; Δε νομίζω να κερδίσεις κάτι... Αλλά και πάλι δεν μπορώ να πω ότι έχω καταλάβει τι προσπαθείς να κάνεις.


    Vir prudens non contra ventum mingit
  •  17-11-2009, 21:19 55246 σε απάντηση της 55245

    Απ: SQL Performance

    Δεν καταλαβαίνω το τι δεν είναι κατανοητό απο το ερώτημα μου. Απλά έχω ένα view όπου μέσα γίνονται joins με ίδιους πίνακες με διαφορετικά id κάθε φορά.Αναλυτικά το πώς είναι το γράφω πιο πάνω.Επείδή τα joins είναι πάρα πολλά (Κάθε φορά διαφορετικό σετ id)  σκέφτηκα να κάνω ένα γενικό function όπου απλά θα περνώ το φίλτρο κάθε φορά.Αυτό με βολεύει πιο πολύ στη συντήρηση του και σκέφτηκα ότι ίσως βελτιώθεί και το performance φυσηκά αν τα function μου το κάνουνε πιο αργό ε τότε δεν θα ήθελα κάτι τέτοιο .

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
  •  17-11-2009, 21:54 55247 σε απάντηση της 55246

    Απ: SQL Performance

    Αυτό που περιγράφεις είναι το πρώτο μισό του προβλήματος, το query που έχεις στα χέρια σου. Δεν εξηγείς όμως παρά μόνο σε πολύ γενικές γραμμές για το UDF. Δεν μπορώ να καταλάβω πως θα αποφύγεις τα joins με το UDF. Θα τα κάνεις εκτός του UDF? Θα κάνεις join το αποτέλεσμα του UDF με τους υπόλοιπους πίνακες; Θα βοηθούσε αν έγραφες στο περίπου το πως θα υλοποιούσες το UDF.


    Vir prudens non contra ventum mingit
  •  17-11-2009, 22:48 55249 σε απάντηση της 55247

    Απ: SQL Performance

    οκ δική μου παράλειψη . Το function θα είχε μέσα τα παρακάτω :

      Select @POSO = t.POSO
      FROM table t
      where t.id = @mid
      AND t.number in(@Filter)
      RETURN @POSO
    Το @mid είναι μια στάνταρ μεταβλητή (Το ID του πίνακα mytable πιο πάνω...) και το @Filter είναι κάθε φορά ανάλογα με την περίπτωση μου θα αλλάζει.

    Στο select του view μου θα έχω function(mytable.id,'12,3,4') as field1 και ο.κ. 

    select DATEDIFF(dd,GetDate(),'20140731') AS EΠΟΜΕΝΕΣ_ΔΙΑΚΟΠΕΣ
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems