In mijn forum heb ik een optie om posts te zoeken op naam van poster. Omdat mijn forum zowel gasten als vaste gebruikers ondersteund, gebruik ik de volgende query. Het probleem is echter dat deze query ongeveer 6 uur kost.
1678 guests, 289 users en 9382 messages.
MySQL voert waarschijnlijk een full join van de drie tables uit en dat is natuurlijk niet de bedoeling. Union zou waarschijnlijk uitkomst bieden, maar is niet beschikbaar in versie 3.
Is dit binnen een query op te lossen of kan ik er beter twee of drie queries van maken?
1678 guests, 289 users en 9382 messages.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| EXPLAIN
SELECT xf_messages . *
FROM xf_messages, xf_guests, xf_users
WHERE instr( lcase( xf_guests.name ) , lcase( "olaf" ) ) AND xf_messages.aid = xf_guests.aid
OR instr( lcase( xf_users.name ) , lcase( "olaf" ) ) AND xf_messages.uid = xf_users.uid
ORDER BY ctime DESC
;
+-------------+------+---------------+------+---------+------+------+---------------------------------+
| table | type | possible_keys | key | key_len | ref | rows | Extra |
+-------------+------+---------------+------+---------+------+------+---------------------------------+
| xf_users | ALL | PRIMARY | NULL | NULL | NULL | 289 | Using temporary; Using filesort |
| xf_messages | ALL | aid,uid | NULL | NULL | NULL | 9382 | |
| xf_guests | ALL | PRIMARY | NULL | NULL | NULL | 1678 | where used |
+-------------+------+---------------+------+---------+------+------+---------------------------------+ |
MySQL voert waarschijnlijk een full join van de drie tables uit en dat is natuurlijk niet de bedoeling. Union zou waarschijnlijk uitkomst bieden, maar is niet beschikbaar in versie 3.
Is dit binnen een query op te lossen of kan ik er beter twee of drie queries van maken?