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

 

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

Πολλά ευρετήρια ή ένα;

Îåêßíçóå áðü ôï ìÝëïò epp1123. Τελευταία δημοσίευση από το μέλος nikolaosk στις 01-06-2009, 22:54. Υπάρχουν 8 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  31-05-2009, 20:43 51168

    Πολλά ευρετήρια ή ένα;

    Καλησπέρα σας και καλό καλοκαίρι. Έχω 7 πινάκες όπου ο καθένας έχει, κατά μέσο όρο 4 με 5 πεδία. Εκτός από το πεδίο που είναι id σε κάθε πίνακα, έχω και άλλα πεδία τα οποία θα τα κάνω indexed. Το ερώτημα είναι αν  θα πρέπει για κάθε πεδίο να φτιάξω και ένα ευρετήριο, ή να φτιάξω ευρετήριο που θα έχει περισσότερα από ένα ευρετήρια. Ποιο είναι πιο σωστό και γιατί; Ευχαριστώ
  •  01-06-2009, 00:48 51169 σε απάντηση της 51168

    Απ: Πολλά ευρετήρια ή ένα;

    Ολα εξαρτώνται από το είδος των πινάκων και τα queries που κάνεις πάνω σε αυτούς. 

    Για παράδειγμα, αν ένας πίνακάς σου είναι write-intensive, δεν θα αποτελούσε καλή πρακτική να δημιουργήσεις πολλα ευρετήρια πάνω του γιατί θα καθυστερούν τα updates/inserts. 

    Από την άλλη, για να απαντήσω στο ερώτημά σου, το οποίο είναι "αυτόνομα ευρετήρια για κάθε πεδίο ή σύνθετα ευρετηρια", η απάντηση βρίσκεται στα select queries που κάνεις συνήθως. Είθισται να φτιάχνουμε ευρετήρια τα οποία μας βοηθούν στα SELECT μας, ήτοι στο WHERE clause των SELECT statements μας. (EDIT: Κακώς αναφέρω μόνο τα SELECT statements, γενικότερα όπου έχουμε filtering με WHERE έχει νόημα) Αν χρησιμοποιείς συνθήκες στα WHERE clauses σου για ένα πεδίο τη φορά, τότε τα μονά ευρετήρια (ένα για κάθε πεδίο) ΜΟΝΟ για τα πεδία που χρησιμοποιείς στο WHERE clause σου, ειναι μια προτεινόμενη λύση. Από την άλλη, αν το WHERE clause σου χρησιμοποιεί συχνότερα σύνθετα κριτήρια, τότε καλό είναι να τα απομονώσεις, και να φτιάξεις ένα covering index που θα καλύπτει τις αναζητήσεις με τα συγκεκριμένα κριτήρια.

    Αυτό που δεν πρέπει να κάνεις με τίποτα, είναι να φτιάξεις όσα περισσότερα ευρετήρια μπορείς, απλά γιατι μπορείς! Τα updates και τα inserts σου θα καθυστερούν, ενώ δεν θα έχεις πραγματικό όφελος αν στα selects σου δεν αξιοποιούνται.


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  01-06-2009, 10:30 51173 σε απάντηση της 51168

    Απ: Πολλά ευρετήρια ή ένα;

    Καταρχήν χρησιμοποίησε την διεθνή ορολογία διότι αλλιώς δεν θα σε καταλαβαίνει κανένας.

    Η λύση του να βάζω παντου indexes είναι η εύκολη λύση για να βελτιώσουμε το performance σε κάποια report της εφαρμογής χωρίς να καταλαβαίνουμε ότι χάνουμε συνέχεια performance στο insert kai update. Κάποια στιγμή έχουμε βαρύνει τόσο πολύ την βάση που περισσότερο μοιάζει με IQ παρά με RDBMS.Smile

    Είναι καλή πρακτική να μην βάζουμε indexes σε ένα μόνο πεδίο. Αλλά να χρησιμοποιούμε μια οικογένεια πεδίων που στατιστικά κάνουν περισσότερο εμφάνιση στα where μας.


    Manos
  •  01-06-2009, 10:44 51174 σε απάντηση της 51173

    Απ: Πολλά ευρετήρια ή ένα;

    manosB:
    Καταρχήν χρησιμοποίησε την διεθνή ορολογία διότι αλλιώς δεν θα σε καταλαβαίνει κανένας.

    Χωρίς να θέλω να ακουστώ "περίεργος", νομίζω οτι είναι υπερβολική η παρατήρηση για τη συγκεκριμένη δημοσίευση. Οι μόνοι Ελληνικοί όροι που αναφέρονται είναι οι λέξεις "πίνακες" (tables), "πεδίο" (field) και "ευρετήρια" (indexes). Για τους πίνακες και τα πεδία, πιστεύω οτι όλοι το έχουμε συνηθίσει, ενώ για τα indexes δεν ακούγεται και τόσο άσχημη η λέξη "ευρετήριο". Σίγουρα, όταν κάποιοι όροι χρησιμοποιούνται ευρέως σε διεθνή βάση, το να αναφέρουμε τις αντίστοιχες (Ελληνικής πανεπιστημιακής καταβολής, συνήθως) ορολογίες στα Ελληνικά, ειδικά όταν δεν είναι απόλυτα δόκιμες, μπορεί να προκαλέσει σύγχυση, αλλά εδώ πιστεύω τα πράγματα είναι αρκετά ξεκάθαρα.

    Φυσικά, αυτό (εκτός του οτι είναι off-topic και ζητώ συγνώμη για αυτό), αποτελεί καθαρά προσωπική μου άποψη. Στις προσωπικές μου κουβέντες πάντως εγώ μιλάω για "τραπέζια" :)


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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  01-06-2009, 11:27 51179 σε απάντηση της 51173

    Απ: Πολλά ευρετήρια ή ένα;

    Να προσθέσω κι εγώ με τη σειρά μου ότι η δημιουργία indexes στη βάση είναι μια «τέχνη» που απαιτεί αρκετή τεχνογνωσία για πετύχεις σωστό αποτέλεσμα.

    Το πρώτο πράγμα που χρειάζεται να ξέρεις είναι το τι queries χρησιμοποιείς. Τι είναι το SARGable και τι το non-SARGable WHERE clause. Τα indexes έχουν άμεση σχέση με τα queries και γι αυτόν το λόγο δεν είναι μια διαδικασία οne-off αλλά κάτι που ελέγχεται και διορθώνεται συχνά. Υπάρχουν περιπτώσεις όπου μπορεί indexes που ευεργετούν ένα SELECT να επιδρούν αρνητικά σε κάποιο άλλο ή πιο πιθανά σε κάποιo INSERT/UPDATE/DELETE.

    Το δεύτερο πράγμα που χρειάζεται να ξέρεις είναι τα inner workings του storage engine, του query-engine και του indexing. Τι είναι το heap, τι είναι το clustered index και τι το non-clustered index. Τι διαφορά έχει ένα INSERT/UPDATE/DELETE όταν γίνεται σε πίνακα χωρίς index, με clustered index και με clustered + non-clustered indexes. Επίσης, θα πρέπει να μπορείς να διαβάζεις και να καταλαβαίνεις ένα execution plan προκειμένου να μπορείς να αποφασίζεις αν ένα index κάνει καλό ή καλό. Το execution time δεν είναι το μοναδικό κριτήριο που παίζει ρόλο σε αυτήν την απόφαση καθώς μιλάμε για μηχανές που προσπαθούν να εξυπηρετίσουν ταυτόχρονα πολλαπλούς χρήστες. Επιπρόσθετα, θα πρέπει να ξέρεις την επίδραση που έχουν τα indexes στα database operations. Τι γίνεται με τα index rebuilds, με τα drops και τα creates. Πως επιδρά ένα index στο μέγεθος της βάσης. Τι γίνεται με τo backup και το restore.

    Τέλος, αυτό που δεν χρειάζεται να ξέρεις είναι διάφοροι «γενικοί» κανόνες που κυκλοφορούν σε forums. Το index tunning είναι tailor made. Υπάρχει μεγάλη άγνοια για το συγκεκριμένο θέμα και το έχω παρατηρήσει όποτε κάνω μάθημα και λέω στους μαθητές μου ότι το clustered index ΔΕΝ μπαίνει σχεδόν ποτέ στο primary key! Οι περίσσοτεροι δεν το δέχονται παρά μόνο αφού τους δείξω το πώς και το γιατί.

    Οπότε τι μπορείς να κάνεις:

    1. Τίποτα. Αν η βάση είναι μικρή και το σίδερο επαρκές, τότε δεν θα δεις ιδιαίτερες διαφορές
    2. Ξεκίνα με το default indexing που κάνει ο SQL Server και στην πορεία τρέξε τον Index Tunning Wizard. Σε γενικές γραμμές, αν δεν χρειάζεσαι κάτι εξεζητημένο, θα σου πει σωστά πράγματα.
    3. Αν διαβάσεις τα παραπάνω και νοιώθεις σίγουρος, πάρε τα πράγματα στα χέρια σου.

    Vir prudens non contra ventum mingit
  •  01-06-2009, 12:42 51186 σε απάντηση της 51179

    Απ: Πολλά ευρετήρια ή ένα;

    Επειδή (το ομολογώ!) δεν ήξερα τον όρο SARGable (αν και κατάλαβα διαβάζοντας οτι μόνο το όνομα δεν ήξερα), έψαξα και βρήκα αυτό που πιστεύω θα βοηθήσει όποιον είχε την ίδια απορία με μένα: 



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

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  01-06-2009, 19:02 51195 σε απάντηση της 51186

    Απ: Πολλά ευρετήρια ή ένα;

    Ωραίες οι απαντήσεις σας, και θα κινηθώ αφού διαβάσω πρώτα κάποια πράγματα πάνω στα όσα αναφέρατε. Επίσης ξέρεις κάποιος που βόσκει το Index Tunning Wizard στον MS SQL Server 2008 Express; Δε μπορώ να το βρω με τίποτα.  Και πάλι ευχαριστώ για τις απαντήσεις σας.
  •  01-06-2009, 19:18 51197 σε απάντηση της 51174

    Απ: Πολλά ευρετήρια ή ένα;

    cap:
    manosB:
    Καταρχήν χρησιμοποίησε την διεθνή ορολογία διότι αλλιώς δεν θα σε καταλαβαίνει κανένας.

    Χωρίς να θέλω να ακουστώ "περίεργος", νομίζω οτι είναι υπερβολική η παρατήρηση για τη συγκεκριμένη δημοσίευση 

    Και εγώ πίνακες και πεδία χρησιμοποιώ άλλα το ευρετήριο μου φαίνεται μη δόκιμο ως όρος. Μου χτυπάει άσχημα στο αυτί βρε αδερφέ Stick out tongue. (καθαρά και off topic άποψη)

    Manos
  •  01-06-2009, 22:54 51210 σε απάντηση της 51197

    Απ: Πολλά ευρετήρια ή ένα;


    Σωτήρη, μαζί σου είμαι.... και εγώ τον varchar τον λέω βαρκάρη.... χαχαχα

    και την f(x) = φώφη

    και την g(x)= τζούλια....

    χαχαχα

    Νικόλαος Καντζέλης
    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
Προβολή Τροφοδοσίας RSS με μορφή XML
Με χρήση του Community Server (Commercial Edition), από την Telligent Systems