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

 

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

SQL και INDEXES

Îåêßíçóå áðü ôï ìÝëïò alexnir. Τελευταία δημοσίευση από το μέλος alexnir στις 08-02-2006, 12:54. Υπάρχουν 4 απαντήσεις.
Ταξινόμηση Δημοσιεύσεων: Προηγούμενο Επόμενο
  •  07-02-2006, 09:27 9336

    SQL και INDEXES

    Καλημέρα και από μένα

    Όπως λέει και ο τίτλος θα ήθελα να ρωτήσω το εξής:

    θέλω να φτιάξω μία βάση δεδομένων (σε SQL Server) με αρκετούς πίνακες (πάνω από 20) και θέλω να ορίσω indexes σε κάθε πίνακα ώστε να γίνονται ποιό γρήγορα οι αναζητήσεις μου με βάση κάποιο συγκεκριμένο πεδίο.Πως μπορώ να το κάνω αυτό;

    Έχω να κερδίσω κάτι στην ταχύτητα αν φτιάξω relations στους πίνακες;

    Αν όλα τα παραπάνω απαντηθούν μετά θέλω να ρωτήσω, αν μπορώ να πάρω την δομή της βάσης και με τα κατάλληλα scripts την φτιάξω σε MySQL, θα έχω προβλήματα;

    Ευχαριστω εκ των προτέρων

    Αλέξανδρος

  •  07-02-2006, 11:22 9337 σε απάντηση της 9336

    Απ: SQL και INDEXES

    Θα απαντήσω πρώτα στην τελευταία ερώτηση. Μπορείς να πάρεις το σχήμα της βάσης σε script αλλά μην περιμένεις να τρέξει σε MySQL χωρίς τροποποιήσεις. Καμμία βάση δεν έχει την ίδια διάλεκτο της SQL με μια άλλη, ενώ η διάλεκτος που χρησιμοποιεί η MySQL έχει και αρκετές ιδιομορφίες, καθώς δεν υποστηρίζουν όλες οι εκδόσεις της Foreign Keys και Constraints. Σχεδόν σίγουρα θα διαφέρουν οι εντολές CREATE DATABASE, οι τύπου που χρησιμοποιούν οι δύο βάσεις και οι εντολές που χρησιμοποιεί η T-SQL για να ελέγξει αν υπάρχει ήδη κάποιος πίνακας. Το καλύτερο θα ήταν να φτιάξεις τα scripts και μετά να σβήσεις τις εντολές εκτός από CREATE TABLE, ALTER TABLE (μέσω αυτής δημιουργούνται τα relations, constraints), CREATE INDEX.

    Για να δημιουργήσεις το script ενός αντικειμένου στον SQL Server κάνεις δεξί κλικ επάνω του από τον Enterprise Manager και επιλέγεις "Generate Script" (ή κάτι τέτοιο, έχω SQL Server 2005 και διαφέρει από τον 2000 σε αυτό).

    Τώρα για τις άλλες ερωτήσεις: Πρώτα η εύκολη. Προσθέτωντας relations δεν κερδίζεις σε ταχύτητα. Γλυτώνεις όμως μεγάλους μπελάδες καθώς τα relations δεν επιτρέπουν να μπουν τιμές σε ένα πεδίο που δεν υπάρχουν και στον parent πίνακα. Π.χ. αν έχεις ένα πίνακα με παραγγελίες Orders και ένα πίνακα με προμηθευτές Suppliers και ορίσεις ένα foreign key από το πεδίο SupplierID του Orders στο SupplierID του Suppliers, δεν μπορείς να βάλεις στον πίνακα Orders μια τιμή SupplierID η οποία δεν υπάρχει και στον πίνακα Suppliers. Διαφορετικά θα ήσουν υποχρεωμένος να κάνεις τον έλεγχο εσύ ο ίδιος.
        Άσε που αν πας να καταλάβεις το σχήμα μιας βάσης χωρίς relations έχεις χάσει από χέρι.

    Τέλος, indexes μπορείς να δημιουργήσεις με διάφορους τρόπους. Μπορείς να το κάνεις με γραφικό τρόπο από τα properties ενός πίνακα στον Enterprise Manager ή από το διάγραμμα της βάσης, ή χρησιμοποιώντας την εντολή CREATE INDEX. Το πως να σχεδιάσεις τα σωστά indexes υπάρχει στο κεφάλαιο Indexes του Books Online ενώ στο Creating an Index περιγράφει πως να τα δημιουργήσεις είτε μέσω Enterprise Manager είτε με SQL εντολές.
        Πρόσεχε μόνο να ορίσεις τα indexes που χρειάζεσαι και όχι περισσότερα. Indexes χρειάζονται στα πεδία που χρησιμοποιείς για αναζητήσεις και στα πεδία που χρησιμοποιείς για να συνδέσεις δύο πίνακες σε ένα join. Ένας τρόπος να βρεις τα σωστά indexes είναι να γράψεις τα query που θέλεις να τρέξουν πιο γρήγορα στον Query Analyzer, να τα επιλέξεις και μετά να εκτελέσεις τον Index Tuning Advisor. Αυτό το εργαλειάκι εντοπίζει ποιά indexes θα βοηθούσαν την γρηγορότερη εκτέλεση των queries, σου τα προτείνει και αν θέλεις, τα δημιουργεί κιόλας.


    Παναγιώτης Καναβός, Freelancer
    Twitter: http://www.twitter.com/pkanavos
  •  07-02-2006, 14:39 9350 σε απάντηση της 9336

    Απ: SQL και INDEXES

    Σε ευχαριστω πάρα πολύ για την απαντηση σου.
    Ειλικρινα με βοήθησε.
  •  07-02-2006, 15:31 9352 σε απάντηση της 9350

    Απ: SQL και INDEXES

    Να κλείσουμε το θέμα αυτό ως "εχει επιλυθεί";
    Σωτήρης Φιλιππίδης

    DotSee Web Services

    View Sotiris Filippidis's profile on LinkedIn

    DotNetNuke them!
  •  08-02-2006, 12:54 9397 σε απάντηση της 9336

    Απ: SQL και INDEXES

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