Optimaze ORDER BY

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

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

Απάντηση
Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 15 Αύγ 2007 23:05

Καλησπέρα,

Εκτελώ το παρακάτω query σε MySQL. Έχω έναν παραπολυ μεγάλο πίνακα και θέλω να πάρω τα 10 τελευταία αποτελέσματα βάση κάποιων χαρακτηριστικών. Το αποτέλεσμα σε χρόνο όταν τα κάνω order by desc είναι απογοητευτικά παρόλο που χρησιμοποιεί index (to id_user είναι ξένο κλειδί και index). To id_aitisi είναι το κύριο κλειδί.

Υπάρχει κάποιος άλλος τρόπος να γίνει πιο γρήγορα;
Αυτό είναι το query:
SELECT * FROM table1 WHERE ID_user = 7 AND deadline> date_add(current_date, interval -60 day) order by id_aitisi desc limit 0,10;

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Optimaze ORDER BY

Δημοσίευση από skeftomilos » 16 Αύγ 2007 04:42

Μήπως χρειάζεται index και στο πεδίο deadline; Υποθέτω ότι αν αφαιρέσεις τον έλεγχο deadline > date_add... και αφήσεις μόνο το ID_user = 7, το query θα τρέχει σφαίρα.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 16 Αύγ 2007 15:30

Όχι η ταχύτητα απόκρισης είναι 2 sec ακόμα και αν σβήσω το deadline > ... . Έχει 100.000 εγγραφές ο πίνακας. Έχω δοκιμάσει και σαν index το πεδίο ID_pelates, deadline αλλά τίποτα....

Υπάρχει κάποιος άλλος τρόπος ώστε να αρχίζω την αναζήτηση του πίνακα από το τέλος προς τα πάνω; Για παράδειγμα πώς γίνεται να πετυχαίνουν ικανοποιητικούς χρόνους τα forums και να δείχνουν τα τελευταία post?


EDIT:
Να και κάτι πολύ περίεργο:
Όταν ζητάω μόνο τα ids παίρνω ταχύτητα 0,1sec

SELECT id_aitisi FROM table1 WHERE ID_user = 7 order by id_aitisi desc limit 0,10;

αν ζητήσω όμως και κάποιο άλλο πεδίο έχω χρόνο απόκρισης 2 και βάλλε...
SELECT id_aitisi, subject FROM table1 WHERE ID_user = 7 order by id_aitisi desc limit 0,10;

Η explain δε μου δείχνει τπτ διαφορετικό... καμιά ιδέα;

Άβαταρ μέλους
tsiger
Honorary Member
Δημοσιεύσεις: 1431
Εγγραφή: 11 Νοέμ 2002 13:40
Τοποθεσία: Thessaloniki Observation Center
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από tsiger » 16 Αύγ 2007 17:13

Ποια εκδοση mySQL χρησιμοποιείς;

Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 16 Αύγ 2007 17:52

την 5.1.14

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Optimaze ORDER BY

Δημοσίευση από skeftomilos » 16 Αύγ 2007 18:42

Αν έβαζες TOP 10 αντί για LIMIT 0, 10 λες να είχε διαφορά;
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 16 Αύγ 2007 18:48

skeftomilos έγραψε:Αν έβαζες TOP 10 αντί για LIMIT 0, 10 λες να είχε διαφορά;
Το Top είναι μόνο στην MS SQL νομίζω.

Άβαταρ μέλους
tsiger
Honorary Member
Δημοσιεύσεις: 1431
Εγγραφή: 11 Νοέμ 2002 13:40
Τοποθεσία: Thessaloniki Observation Center
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από tsiger » 16 Αύγ 2007 18:58


Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 16 Αύγ 2007 19:51

tsiger έγραψε:auto to exeis dei ypothetw?
http://www.mysqlperformanceblog.com/200 ... imization/
yeap... Πάντα googlaro πριν ρωτήσω ;) :D

Άβαταρ μέλους
skeftomilos
Script Master
Δημοσιεύσεις: 2888
Εγγραφή: 07 Ιαν 2005 07:22
Τοποθεσία: Αθήνα

Optimaze ORDER BY

Δημοσίευση από skeftomilos » 16 Αύγ 2007 20:19

MeTaL-RoY έγραψε:Το Top είναι μόνο στην MS SQL νομίζω.
Yeap, έχει δίκιο! Η αλήθεια είναι ότι όσα ξέρω είναι για MS SQL Server.

Μήπως να έφτιαχνες ένα index για τα πεδία ID_user, id_aitisi σε συνδυασμό; Πάντως αν το πρόβλημα λύνεται κάνοντας SELECT μόνο τα ids, τότε λογικά θα είχες καλή απόδοση έχοντας ένα subquery που να επιστρέφει σκέτα ids.
The pure and simple truth is rarely pure and never simple. Ο μη νους δε σκέπτεται μη σκέψεις για το τίποτα.

Άβαταρ μέλους
MeTaL-RoY
Δημοσιεύσεις: 67
Εγγραφή: 12 Μαρ 2003 16:58
Τοποθεσία: Athens
Επικοινωνία:

Optimaze ORDER BY

Δημοσίευση από MeTaL-RoY » 18 Αύγ 2007 18:02

skeftomilos έγραψε:
MeTaL-RoY έγραψε:Το Top είναι μόνο στην MS SQL νομίζω.
Πάντως αν το πρόβλημα λύνεται κάνοντας SELECT μόνο τα ids, τότε λογικά θα είχες καλή απόδοση έχοντας ένα subquery που να επιστρέφει σκέτα ids.
Έτσι ακριβώς έλυσα το πρόβλημα. Η απορία μου είναι πως είναι δυνατόν να συμβαίνει αυτό... Υπάρχει περίπτωση να ψάχνει τις εγγραφές από τον index μόνο όταν ζητάς το id?

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

Optimaze ORDER BY

Δημοσίευση από Rapid-eraser » 20 Αύγ 2007 12:22

to id eivai indexed timi apo oti eipes opote dev xriazete row locking gia va parei tnv timi.
Apo tnv stigmi pou diveis * sta pedia episstrofis avagkazeis tnv basi va mpei kai se row locking gia va sou dosei tis times sta ipolipa pedia
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”

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

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