υπάρχει διαφορά ταχύτητας στα παρακάτω queries?

Συζητήσεις για την βάση δεδομένων MySQL και το phpMyAdmin

Συντονιστές: WebDev Moderators, Super-Moderators

Απάντηση
sibas
Honorary Member
Δημοσιεύσεις: 1853
Εγγραφή: 21 Φεβ 2003 01:21
Τοποθεσία: Μια εδώ.. Μια εκεί.. Σήμερα είμαι εδώ!!!
Επικοινωνία:

υπάρχει διαφορά ταχύτητας στα παρακάτω queries?

Δημοσίευση από sibas » 02 Σεπ 2016 14:49

Έχω μια απλή ερώτηση και δεν γνωρίζω την απάντηση

υποθετικά, έχω το table data
id int AUTO_INCREMENT,
pid int, // το pid κρατάει τον αριθμό ενός άλλου table id
data1 klp
data2 klp
έχω το εξής select
SELECT * FROM data WHERE pid=$number LIMIT 1
τώρα η ερώτηση είναι, υπάρχει διαφορά στα παρακάτω queries?
UPDATE data SET data1=$whatever WHERE pid=$number
ή
UPDATE data SET data1=$whatever WHERE id=$number
σκέφτομαι ότι το select υπάρχει ήδη στην μνήμη με το pid άρα είναι πιο γρήγορο να γίνει το update ή δεν έχει σημασία???

Άβαταρ μέλους
Rapid-eraser
WebDev Moderator
Δημοσιεύσεις: 6851
Εγγραφή: 05 Απρ 2003 17:50
Τοποθεσία: Πειραιάς
Επικοινωνία:

υπάρχει διαφορά ταχύτητας στα παρακάτω queries?

Δημοσίευση από Rapid-eraser » 02 Σεπ 2016 15:44

Για να οριστεί ένα πεδίο ως AUTO_INCREMENT πρέπει να είναι primary key (index)

Αν το pid δεν έχει οριστεί ως index τότε το update στο pid γίνετε χωρίς χρήση index και κατά συνέπεια είναι πιο αργό στο να εντοπιστεί η εγγραφή.

Αν κάνεις χρήση του EXPLAIN θα δεις που θα γκρινιάζει ο optimizer ότι γίνεται un-indexed search.

Καλό είναι επίσης να περνάς και το "LIMIT" και στα update query εφόσον ξέρεις πόσες εγγραφές είναι.


Επίσης άλλη μία διαφορά είναι ότι το id είναι διασφαλισμένο ότι είναι unique λόγο του primary key ενώ το πεδίο pid αν δεν έχει οριστεί μπορεί να μην είναι unique και να επηρεάζει περισσότερες εγγραφές.
Cu, Rapid-eraser, Tα αγαθά copies κτώνται.
Love is like oxygen, You get too much you get too high
Not enough and you're gonna die, Love gets you high

Απάντηση

Επιστροφή στο “MySQL”

Μέλη σε σύνδεση

Μέλη σε αυτήν τη Δ. Συζήτηση: Δεν υπάρχουν εγγεγραμμένα μέλη και 0 επισκέπτες