Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

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

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

Απάντηση
ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από ioannisls » 06 Αύγ 2014 15:52

έστω ότι έχουμε μία βάση με δεδομένα. Και από μία στήλη θέλουμε να βρούμε το πλήθος των δεδομένων και τη μέγιστη τιμή αυτής. Σα σκέψεις υπάρχουν δύο:
1ον) με select max() και select count ()
2ον) με select των τιμών της στήλης και εισαγωγής αυτών σε array. Και μέσω php βρίσκω τα ζητούμενα.

Ποιον τρόπο θεωρείτε ποιο σωστό, γρήγορο, "ελαφρύ";

Άβαταρ μέλους
Alice_Cooper
Δημοσιεύσεις: 1948
Εγγραφή: 11 Μάιος 2007 00:33
Τοποθεσία: Ioannina
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από Alice_Cooper » 06 Αύγ 2014 16:35

xmmm giati oxi ena
select me sort by timh Desc...
kai sthn proth egrafh exeis to max tis

kai mysql_num_rows gia na pareis ton arithmo egrafon

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από ioannisls » 06 Αύγ 2014 18:26

άρα λες πάνω κάτω σαν αυτό που λέω στο πρώτο. Αλλά το πρώτο χρειάζεται περισσότερους πόρους να σου επιστρέψει το αποτέλεσμα σε σχέση με το δεύτερο.
πιστεύω ....
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από geomagas » 06 Αύγ 2014 18:33

Κατ' αρχάς γιατί δύο κλησεις στη βάση;

Κώδικας: Επιλογή όλων

select max(col) as m,count(*) as n from table
Ειδικά στην περίπτωση που η col είναι indexed, δεν υπάρχει κανένας λόγος να μεταφέρεις όλα τα δεδομένα στην php για να στα μετρήσει.

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από ioannisls » 06 Αύγ 2014 18:45

και ο geomagas πιστεύω έδωσε τρίτη "σωστή" πρόταση και λογικά καλύτερη από τις άλλες. Αλλά ... θα κάνω πάλι το συνήγορο του διαβόλου. Σε παλιό μου άρθρο (http://www.freestuff.gr/forums/viewtopi ... 179#602179) είχαμε πει ότι γενικότερα όσο λιγότερα select τόσο πιο γρήγορη επεξεργασία. και όντως με ένα select παίρνουμε αυτό που θέλουμε ... αλλά δεν έχουμε ένα απλό select που απλά μας δίνει τα δεδομένα του πίνακα, αλλά ένα select που κάνει επεξεργασία και μετά μας δίνει τα δεδομένα.
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από burnmind » 06 Αύγ 2014 18:50

Θεωρώ πως αν αν συνδιάσεις τον πρώτο σου τρόπο σε ένα query θα έχεις την καλύτερη απόδοση, δηλαδή κάτι του στυλ:

Κώδικας: Επιλογή όλων

SELECT MAX(value), COUNT(*) FROM table
Αφότου έγραψα το παραπάνω, μου δημιουργήθηκε η απορία αν όντως έχω δίκιο και ποια είναι η πραγματική διαφορά στην απόδοση, οπότε έγραψα ένα μικρό test, το οποίο μπορεί να βρεθεί εδώ.

Στο test που έτρεξα, έχουμε έναν πίνακα με 3 columns (id - primary key, title, value) και 10000 rows του στυλ (12, title 12, 281).

Ορίστε τα αποτελέσματα, που επιβεβαιώνουν το παραπάνω* (πρόσθεσα και ένα select *, έτσι, για να δω τη διαφορά):
Query: SELECT MAX(`value`) as `max` FROM just_testing
Duration: 0.00548250

Query: SELECT COUNT(*) FROM just_testing
Duration: 0.00430725

Query: SELECT MAX(`value`) as `max`, COUNT(*) FROM just_testing
Duration: 0.00534125

Query: SELECT `value` FROM just_testing ORDER BY `value` DESC
Duration: 0.02182775

Query: SELECT * FROM just_testing ORDER BY `value` DESC
Duration: 0.04469075
*edit: αυτό που έγραψε και ο geomagas δηλαδή.

ioannisls
Δημοσιεύσεις: 83
Εγγραφή: 11 Ιαν 2012 15:50
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από ioannisls » 06 Αύγ 2014 19:08

burnmind --> πιστεύω ότι όσοι διαβάσαμε ή συμμετήχαμε στο εν λόγω θέμα ... μας κάλυψες με το καλύτερο τρόπο
http://luckyweek.eu/
Στατιστικά για το στοιχηματικό ποδόσφαιρο και τα τυχερά παιχνίδια

Άβαταρ μέλους
dva_dev
Script Master
Δημοσιεύσεις: 3790
Εγγραφή: 16 Σεπ 2005 01:32
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από dva_dev » 06 Αύγ 2014 23:55

burnmind έγραψε: Αφότου έγραψα το παραπάνω, μου δημιουργήθηκε η απορία αν όντως έχω δίκιο και ποια είναι η πραγματική διαφορά στην απόδοση, οπότε έγραψα ένα μικρό test, το οποίο μπορεί να βρεθεί εδώ.
Ακόμα καλύτερα το prepare στη fill_with_data να το βγάλεις έξω από το for. Το νόημα είναι να κάνεις prepare μία φορά και μετά να συμπληρώνεις τις παραμέτρους και να εκτελείς όσες φορές θέλεις.

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από burnmind » 07 Αύγ 2014 00:34

Σωστός, fixed.

geomagas
Δημοσιεύσεις: 667
Εγγραφή: 06 Απρ 2013 13:36
Τοποθεσία: Ηράκλειο Κρήτης
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από geomagas » 07 Αύγ 2014 01:08

[nitpick]Ναι αλλά τις bindParam() τις άφησες μέσα! :P[/nitpick]

Άβαταρ μέλους
burnmind
Script Master
Δημοσιεύσεις: 954
Εγγραφή: 26 Σεπ 2009 02:14
Τοποθεσία: UK
Επικοινωνία:

Δύο φορές κλήση της βάσης ή μία φορά και επεξεργασία μέσω php;

Δημοσίευση από burnmind » 07 Αύγ 2014 01:57

:oops: Fixed κι αυτό! ;)

Απάντηση

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

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

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