SELECT από βάση

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

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

Απάντηση
Arxis
Δημοσιεύσεις: 3
Εγγραφή: 13 Νοέμ 2013 19:20

SELECT από βάση

Δημοσίευση από Arxis » 13 Νοέμ 2013 19:33

Γειά σας,

Μπορεί να ακούγεται χαζή η ερώτηση... αλλά έχω μία τεράστια βάση (>2εκ rows) η οποία έχει πολύ traffic (συνεχές ενημέρωση logging) και θέλω να κάνω όσο το δυνατόν βέλτιστο:
SELECT <x1> <x2> ... <xn> WHERE y= {}

όπου στο y έχω μια τεράστια λίστα (~200.000) από usernames (varchar). Το καλό είναι ότι το y field είναι indexed.

α) script με 200.000 select loop --> δεν ακούγεται καλή ιδέα
β) SELECT <x1><x2>...<xn> WHERE y in ( 'value1', 'value2', ... , 'value200000) --> δε θα έχει τραγικό αποτέλεσμα στο performance;

Υπάρχει πιο βέλτιστος τρόπος;

Ευχαριστώ!

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

SELECT από βάση

Δημοσίευση από dva_dev » 13 Νοέμ 2013 22:48

Αν μπορέσεις να μας δώσεις να καταλάβουμε γιατί χρειάζεται να δώσεις είτε 200.000 queries είτε 200.000 usernames σε λίστα ίσως μπορέσουμε να προτείνουμε κάτι.

Arxis
Δημοσιεύσεις: 3
Εγγραφή: 13 Νοέμ 2013 19:20

SELECT από βάση

Δημοσίευση από Arxis » 13 Νοέμ 2013 23:11

εφόσον μου ζητούνται τα logging στοιχεία του row για καθένα από αυτά τα 200.000 names της συγκεκριμμένης λίστας; :o

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

SELECT από βάση

Δημοσίευση από dva_dev » 14 Νοέμ 2013 01:20

Από το α) μέχρι το β) υπάρχουν πολλές ενδιάμεσες επιλογές με συνδυασμό τους.
Θα μπορούσες να κάνεις π.χ. 1000 loops περνώντας 200 usernames κάθε φορά στο "in (...)".

Ή θα μπορούσες να δοκιμάσεις να φτιάξεις έναν πίνακα π.χ. logUsernames που να κρατάς τα usernames και να κάνεις join με αυτόν τον πίνακα για να φέρεις τα στοιχεία που θέλεις.

Arxis
Δημοσιεύσεις: 3
Εγγραφή: 13 Νοέμ 2013 19:20

SELECT από βάση

Δημοσίευση από Arxis » 14 Νοέμ 2013 08:04

Ευχαριστώ για την απάντηση! Το σκέφτηκα για το JOIN γιατί το αναφέρουν συχνά, αλλά φτιάχνοντας έναν πίνακα με 1 column μόνο και κάνοντας Join τους δύο πίνακες (ανέκδοτο ακούγεται!), θα δώ τόση διαφορά στο performance; Υπολογιστικά, το ίδιο πράγμα δε κάνει η sql για να εξάγει τα αποτελέσματα, με το να φτιάξω ένα τεράστιο IN; :)

Απάντηση

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

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

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