Programmieren - alles kontrollieren 4.934 Themen, 20.613 Beiträge

MySQL - Copying to tmp table

hansapark / 2 Antworten / Flachansicht Nickles

Hallo. Ich habe mir meine beiden langsamsten MySQL-Queries in der Konsole angesehen und gesehen, dass die meiste Zeit bei:

| Copying to tmp table | 0.000263 |
| Copying to tmp table | 0.052237 |
| Sorting result | 0.000035 |

vergeht. Was hat es mit den tmp tables auf sich? Es war mir nicht bewusst, dass sowas überhaupt passiert. Und kann ich den Query anpassen, um das zu verbessern?

Z.Bsp. diesen:

select `pics`.*, `users`.`username`, `users`.`displayname` from `pics` left join `users` on `users`.`id` = `pics`.`user_id` order by RAND() asc limit 4;

Da werden 4 Zufallsbilder geladen, und username und displayname dazu geholt mit join.

Aber am join sollte es nicht liegen, oder?

Indizes habe ich diese:

pics:

PRIMARY id
UNIQUE created_at
INDEX user_id
INDEX location

und bei users:

PRIMARY id
UNIQUE username

danke für einen tipp.

bei Antwort benachrichtigen
hansapark Borlander „Es muss zur Verarbeitung der Abfrage noch eine temporäre ...“
Optionen

ok. dein query erstellt auch tmp tables, ist aber schon schneller.

| Sending data | 0.000126 |
| executing | 0.000002 |
| Copying to tmp table | 0.000087 |
| Copying to tmp table | 0.026333 |
| Sorting result | 0.001759 |

die alternativen zu ORDER BY RAND() werd ich mir angucken. danke. (in explain muss ich mich erst reinfuchsen, was das alles bedeutet)

bei Antwort benachrichtigen