Βελτιστοποίηση query αναζήτησης

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

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

Απάντηση
Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Βελτιστοποίηση query αναζήτησης

Δημοσίευση από philos » 21 Ιουν 2014 19:24

Καλησπέρα!
Θα ήθελα την άποψή σας για το ακόλουθο query.
Πρόκειται για μια λειτουργία που αναζητάει IPs χρηστών από τον πίνακα posts και από τον πίνακα users.
Το ζητούμενο να ξέρετε, είναι να επιστρέφονται αποτελέσματα είτε βρεθεί post με την ip που αναζητάμε είτε χρήστης στον πίνακα user (ο πίνακας user έχει το column ipaddress όπου καταχωρεί την IP του χρήστη όταν κάνει εγγραφή, οπότε μιλάμε για πρόσθετη πληροφορία - δεν αρκεί μόνο η αναζήτηση στον posts - δηλαδή τα posts του forum).

Είναι βασισμένο στη μηχανή vbulletin, οπότε σας παραθέτω το query μου:

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

      $resultusers = $db->query_read_slave("
        SELECT user.userid, user.username, user.usergroupid, user.displaygroupid, 
                                   userban.bandate, userban.liftdate, userban.reason AS banreason, 
                                   adminuser.userid AS adminid, adminuser.username AS adminname,
                                   userban.userid AS isbanned
    		FROM " . TABLE_PREFIX . "user AS user
    		LEFT JOIN " . TABLE_PREFIX . "post AS post ON (user.userid = post.userid)
        LEFT JOIN " . TABLE_PREFIX . "userban AS userban ON (userban.userid = user.userid)
        LEFT JOIN " . TABLE_PREFIX . "user AS adminuser ON(adminuser.userid = userban.adminid)
    		WHERE user.usergroupid IN (" . $vbulletin->options['sc_iplookup_search_usergroupids'] . ") AND (post.ipaddress = '" . $vbulletin->db->escape_string($searchquery) . "' OR user.ipaddress = '" . $vbulletin->db->escape_string($searchquery) . "') 
    		GROUP BY user.userid 
        ORDER BY user.username ASC 
        LIMIT 200");
Γίνεται JOIN και ο πίνακας userban, καθώς θέλουμε ΑΝ ο χρήστης είναι banned, να έχουμε και κάποιες πληροφορίες γι αυτό (πχ το λόγο, την ημερομηνία κτλ).

Επιδέχεται βελτιώσεις ώστε να είναι πιο ελαφρύ;
ΥΓ: Σε site με 250.000 χρήστες και 3 εκατομμύρια posts, ρίχνει εντελώς τον server.

Άβαταρ μέλους
philos
Δημοσιεύσεις: 264
Εγγραφή: 30 Αύγ 2007 23:32

Βελτιστοποίηση query αναζήτησης

Δημοσίευση από philos » 21 Ιουν 2014 21:26

Τελικά έσπασα το query σε δύο (ένα που αναζητά στον post και ένα που αναζητά στο user) και όλα ok. Για κάποιο λόγο το παραπάνω query με την OR και τον τρόπο που τραβάει από τους πίνακες, έριχνε τον server (υποθέτω ότι μάλλον σκάνναρε πολλές φορές τους πίνακες).

Απάντηση

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

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

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