abonnementen ibood.com bol.com Gearbest
pi_171002663
registreer om deze reclame te verbergen
Ik merk dat een van mijn sites opeens erg traag is geworden door een update van het berichtensysteem dat ik heb geschreven.

Nu ben ik nogal een SQL n00b dus ik wou graag de Fok! Hulplijn inzetten om te kijken hoe we de query in kwestie kunnen optimizen. De query laadt een lijst met leden op volgorde van laatste bericht dat er tussen jou en deze persoon is verstuurd.

SELECT msg.id, m.login, MAX(msg.date_sent) AS most_recent_message, m.pasfoto, m.id AS mid, m.gender FROM mail_msg msg, members m
WHERE msg.user_id = $auth AND msg.folder != '2' AND ((msg.user_from = $auth AND msg.user_to = m.id) OR (msg.user_to = $auth AND msg.user_from = m.id AND msg.verified = '1')) AND m.id != $auth GROUP BY m.id ORDER BY most_recent_message DESC LIMIT $from, $aantal_per_page

Het gaat om slechts 200.000 berichten in de mail_msg tabel en 50.000 leden in de members tabel, dus daar zou het niet aan moeten liggen.

Huidige indices:
PRIMARY BTREE Ja Nee id 204496 A Nee
from_user BTREE Nee Nee user_from 14606 A Nee
to_user BTREE Nee Nee user_to 25562 A Nee
user_id BTREE Nee Nee user_id 34082 A Nee
verified BTREE Nee Nee verified 2 A Nee
  woensdag 17 mei 2017 @ 15:19:08 #2
291799 TwenteFC
Red is the color.
pi_171004779
Gooi het eens tussen code tags en formatteer de query even netjes. :P
pi_171021186
1) waarom gebruik je niet gewoon joins, maakt je query op zijn minst een stuk overzichtelijker
2) wat zegt een explain?
3) watvoor taal+database wrapper gebruik je die parameters met een dollarteken prepend? Lijken net php-variablen zo, lekker verwarrend.
4)met TwenteFC, gebruik code tags.
pi_171051317
registreer om deze reclame te verbergen
Mijn excuses :P

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
SELECT 
msg.id, 
m.login, 
MAX(msg.date_sent) AS most_recent_message, 
m.pasfoto, 
m.id AS mid, 
m.gender 
FROM mail_msg msg, members m
WHERE 
msg.user_id = $auth AND 
msg.folder != '2' AND 
((msg.user_from = $auth AND msg.user_to = m.id) OR (msg.user_to = $auth AND msg.user_from = m.id AND msg.verified = '1')) AND 
m.id != $auth GROUP BY m.id 
ORDER BY most_recent_message DESC 
LIMIT $from, $aantal_per_page

Explain:
1
2
3
id     select_type     table     type     possible_keys     key     key_len     ref     rows     Extra     
1     SIMPLE     msg     ref     from_user,to_user,user_id,verified     user_id     4     const     191     Using where; Using temporary; Using filesort
1     SIMPLE     m     range     PRIMARY,status,id_pswd-md5,login,country_id,state_...     PRIMARY     3     NULL    20214     Using where; Using join buffer (Block Nested Loop)
abonnementen ibood.com bol.com Gearbest
Forum Opties
Forumhop:
Hop naar:
(afkorting, bv 'KLB')