Συνήθως , ένα ερώτημα δεν εμφανίζει όλες τις στήλες του πίνακα ή τους πίνακες αναφέρεται. Ο εργοδότης μπορεί, για παράδειγμα , έχετε έναν πίνακα που παρακολουθεί τις απουσίες των εργαζομένων . Αν θέλει να ανακαλύψει την οποία οι εργαζόμενοι είχαν τουλάχιστον μία απουσία κατά τον τελευταίο μήνα , θα μπορούσε να χρησιμοποιήσει ένα ερώτημα που μοιάζει κάπως έτσι :
SELECT employees.first_name , οι εργαζόμενοι employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date > = ' JUN- 01-09 ' ?
Εάν Bob Smith ήταν απούσα για τρεις ημέρες τον Ιούνιο , τα αποτελέσματα του ερωτήματος θα περιλαμβάνει τρεις σειρές Bob Smith . Ακόμα κι αν το ερώτημα δεν εμφανίζει την ημερομηνία , αφού Bob τρεις απουσίες ήταν σε διαφορετικές ημερομηνίες , αυτό το ερώτημα επιστρέφει κάθε μία από τις τρεις σειρές .
Εικόνων Γιατί Διπλότυπο αποτελέσματα είναι κακό
Η
Διπλότυπο σειρές κάνουν όχι μόνο την έξοδο σας μπορείτε να τις διαβάσετε , μπορούν επίσης να επιβραδύνουν το ερώτημά σας και τους πόρους της βάσης δεδομένων γουρούνι . Εκτός αν η βάση δεδομένων σας είναι πολύ μικρό , ίσως την ανάπτυξη σεναρίων SQL σας σε ένα στιγμιότυπο της βάσης δεδομένων ανάπτυξης που είναι ξεχωριστό από το παράδειγμα της παραγωγής σας . Δεν είναι καθόλου ασυνήθιστο για την ανάπτυξη περιπτώσεις να έχουν πολύ λιγότερα δεδομένα σε αυτά από το παράδειγμα της παραγωγής .
Αν επιτρέψετε διπλές σειρές στην έξοδο σας , μπορείτε να κάνετε αναζήτηση στη βάση σας σε όλη τη διαδρομή μέσα από όλα τα πίνακες που έχετε ενώνονται στο ερώτημά σας . Αυτό μπορεί να κάνει ένα ερώτημα που έτρεξε αρκετά γρήγορα dev παράδειγμα σας αργός , έως και σέρνεται στην παραγωγή . Εάν η βάση δεδομένων παραγωγής σας είναι μεγάλη , το ερώτημά σας μπορεί να τρέξει για ώρες
Η Χρήση και Βελτιστοποίηση DISTINCT
Η
Οι ακόλουθες επιλέξτε επιστρέφει μία σειρά για τον Bob Smith : .
SELECT DISTINCT employees.first_name , οι εργαζόμενοι employees.last_nameFROM , absencesWHERE employees.employee_id = absences.employee_idAND absences.date ΜΕΤΑΞΥ '2009 -06- 01 ' και '2009 -07- 01' ?
Τα αποτελέσματά σας είναι πιο εύκολο να διαβάσει , αλλά ο διακομιστής της βάσης δεδομένων σας εξακολουθεί να έχει να εργαστεί πάρα πολύ σκληρά , αν τραπέζι των εργαζομένων σας έχει πολύ περισσότερες γραμμές από τις απουσίες τραπέζι σας . MySQL θα περάσουν από κάθε εγγραφή στους υπαλλήλους τραπέζι σας για να δείτε εάν ο υπάλληλος έχει οποιαδήποτε απουσίες
Αντ 'αυτού , κάνουν ξεχωριστό έργο για να κάνετε το ερώτημά σας πιο αποτελεσματική : .
SELECT DISTINCT employees.first_name , οι εργαζόμενοι employees.last_nameFROM , absencesWHERE absences.employee_id = employees.employee_idAND absences.date > = ' JUN- 01-09 ' ?
Αυτό το ερώτημα θα λάβει μια εγγραφή στον πίνακα απουσίες και να σταματήσει την αναζήτηση στο τραπέζι των εργαζομένων τη στιγμή που βρίσκει τον υπάλληλο που πηγαίνει με αυτή την απουσία . Το ερώτημά σας θα τρέχει μόνο όσες αναζητήσεις , καθώς υπάρχουν απουσίες , και θα ψάξει μέσω πολύ λιγότερο από το τραπέζι των εργαζομένων σε κάθε αναζήτηση . Χρησιμοποιεί λιγότερους πόρους της βάσης δεδομένων και τρέχει πολύ πιο γρήγορα .
Η
εικόνων
Πνευματικά δικαιώματα © Γνώση Υπολογιστών Όλα τα δικαιώματα κατοχυρωμένα