Logo el.boatexistence.com

Θα επηρεάσει η διαφορά την απόδοση;

Πίνακας περιεχομένων:

Θα επηρεάσει η διαφορά την απόδοση;
Θα επηρεάσει η διαφορά την απόδοση;

Βίντεο: Θα επηρεάσει η διαφορά την απόδοση;

Βίντεο: Θα επηρεάσει η διαφορά την απόδοση;
Βίντεο: Πως θα δείς αν έχει σωστή απόδοση το κλιματιστικό σου στη θέρμανση? 2024, Ενδέχεται
Anonim

Ναι, καθώς η χρήση DISTINCT θα προκαλέσει (μερικές φορές σύμφωνα με ένα σχόλιο) την παραγγελία αποτελεσμάτων Η ταξινόμηση εκατοντάδων εγγραφών απαιτεί χρόνο. Δοκιμάστε GROUP BY BY BY σας, μερικές φορές μπορεί να οδηγήσει το βελτιστοποιητή ερωτημάτων να επιλέξει έναν πιο αποτελεσματικό αλγόριθμο (τουλάχιστον με την Oracle παρατήρησα σημαντικό κέρδος απόδοσης).

Είναι κακό να χρησιμοποιείτε το διακριτικό;

Λοιπόν, η ακατάλληλη χρήση του "διακεκριμένου" όχι μόνο κρύβει το πραγματικό πρόβλημα (διπλότυπες εγγραφές στους πίνακες, έλλειψη συνθήκης στην ρήτρα on) όπως συζητήθηκε παραπάνω, αλλά επίσης υποβαθμίζει την απόδοση του ερωτήματος… Αυτό θα αυξήσει σημαντικά το κόστος IO (λογικές αναγνώσεις) του ερωτήματος.

Το διακριτικό κάνει το ερώτημα πιο αργό;

Πολύ λίγα ερωτήματα ενδέχεται να αποδίδουν ταχύτερα στη λειτουργία SELECT DISTINCT και πολύ λίγα θα έχουν πιο αργή απόδοση (αλλά όχι σημαντικά πιο αργά) στη λειτουργία SELECT DISTINCT, αλλά για την τελευταία περίπτωση είναι πιθανό ότι η εφαρμογή μπορεί να χρειαστεί να εξετάσει τις διπλές περιπτώσεις, γεγονός που μεταθέτει το βάρος της απόδοσης και της πολυπλοκότητας στην εφαρμογή.

Είναι καλύτερο να χρησιμοποιήσετε το διακριτικό ή το GROUP BY;

Στη MySQL, το DISTINCT φαίνεται λίγο πιο γρήγορο από το GROUP BY αν το Πεδίο δεν έχει ευρετηριαστεί. Το DISTINCT εξαλείφει μόνο τις διπλότυπες σειρές, αλλά η ΟΜΑΔΑ ΑΝΑ φαίνεται να τις ταξινομεί επιπλέον.

Γιατί δεν πρέπει να χρησιμοποιούμε διακριτά στην SQL;

Αν υπάρχει επιλογή διαφορετικού για να «διορθώσει» ένα πρόβλημα, τότε είναι πιθανό να έχετε κακή απόδοση σε αντάλλαγμα. Το GROUP BY σάς επιτρέπει να χρησιμοποιείτε συγκεντρωτικές συναρτήσεις, όπως AVG, MAX, MIN, SUM και COUNT. DISTINCT απλώς αφαιρεί τα διπλότυπα.

Συνιστάται: