Hallo!
Ich habe in meiner Anwendung eine Query, die bei ca 2000 Ergebnissen knapp 8 Sekunden braucht. Das ist zu lang, oder?
Hier die Query:
*last_visit ist Teil von der Tabelle online*
Ich habe versucht, das Problem über Indizes anzupacken. Dazu habe ich einen Index in der Tabelle "online" für die Spalte "userid" erstellt und in der Tabelle einen Index für alle Spalten, die in der WHERE-Klausel auftauchen.
Explain mit der Query sagt folgendes:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user_pets2 ALL enemys NULL NULL NULL 3327 Using where; Using temporary; Using filesort
1 SIMPLE online ALL online_users NULL NULL NULL 5297 Range checked for each record (index map: 0x2)
Die Anzahl rows und die Werte NULL deuten doch darauf hin, dass die Indizes nicht optimal oder gar nicht genutzt werden?
Wie kann ich also diese Query optimieren?
Wie erzeuge ich einen Index über beide Tabellen?
Danke für die Hilfe!
Ich habe in meiner Anwendung eine Query, die bei ca 2000 Ergebnissen knapp 8 Sekunden braucht. Das ist zu lang, oder?
Hier die Query:
PHP-Code:
SELECT user_pets2.id, user_pets2.name, user_pets2.owner,
user_pets2.level
FROM online, user_pets2
WHERE user_pets2.battle_status =0
AND online.userid = user_pets2.owner
AND user_pets2.owner !=43042
AND user_pets2.current_hp > user_pets2.max_hp * 0.5
AND user_pets2.adoption = '0'
AND user_pets2.hunger > '2'
AND user_pets2.level =2
ORDER BY last_visit ASC
Ich habe versucht, das Problem über Indizes anzupacken. Dazu habe ich einen Index in der Tabelle "online" für die Spalte "userid" erstellt und in der Tabelle einen Index für alle Spalten, die in der WHERE-Klausel auftauchen.
Explain mit der Query sagt folgendes:
id select_type table type possible_keys key key_len ref rows Extra
1 SIMPLE user_pets2 ALL enemys NULL NULL NULL 3327 Using where; Using temporary; Using filesort
1 SIMPLE online ALL online_users NULL NULL NULL 5297 Range checked for each record (index map: 0x2)
Die Anzahl rows und die Werte NULL deuten doch darauf hin, dass die Indizes nicht optimal oder gar nicht genutzt werden?
Wie kann ich also diese Query optimieren?
Wie erzeuge ich einen Index über beide Tabellen?
Danke für die Hilfe!
Kommentar