Ik ben een query aan het schrijven om het aantal aanwezige entities per tijdspanne weer te geven. Ik heb echter het probleem dat volgens EXPLAIN een temporary table gebruikt wordt. Dit kan niet, aangezien de tabel in kwestie ongeveer 200K rows heeft, en uiteindelijk zo'n 10M rows krijgt.
De query zoals ik hem nu heb: (De waarde 117 is niet hardcoded, maar eerder opgevraagd.)
De output van EXPLAIN:
Ik heb geen flauw idee wat ik over het hoofd zie. De query doet het op zich gewoon goed, maar is veel te langzaam door het gebruik van een temporary table. Aan verkeerde indexen lijkt het ook niet te liggen.
De query zoals ik hem nu heb: (De waarde 117 is niet hardcoded, maar eerder opgevraagd.)
SQL:
1
2
3
4
5
| SELECT utrancell.fld_spawntime, COUNT(utrancell.fld_entityid) FROM tbl_trenddata_ranos_utrancell_qtr utrancell INNER JOIN tbl_entity entity ON entity.fld_id = utrancell.fld_entityid WHERE entity.fld_parentid = 117 GROUP BY utrancell.fld_spawntime DESC |
De output van EXPLAIN:
code:
Het vreemde is, dat wanneer ik de WHERE weghaal, er geen temporary table gebruikt wordt.1
2
3
4
5
6
| +----+-------------+-----------+------+----------------------+--------------+---------+----------------------+------+---------------------------------+ | id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra | +----+-------------+-----------+------+----------------------+--------------+---------+----------------------+------+---------------------------------+ | 1 | SIMPLE | entity | ref | PRIMARY,fld_ParentID | fld_ParentID | 4 | const | 229 | Using temporary; Using filesort | | 1 | SIMPLE | utrancell | ref | fld_EntityID | fld_EntityID | 4 | kronos.entity.fld_ID | 61 | | +----+-------------+-----------+------+----------------------+--------------+---------+----------------------+------+---------------------------------+ |
Ik heb geen flauw idee wat ik over het hoofd zie. De query doet het op zich gewoon goed, maar is veel te langzaam door het gebruik van een temporary table. Aan verkeerde indexen lijkt het ook niet te liggen.
[ Voor 3% gewijzigd door Zr40 op 28-06-2006 14:05 . Reden: Typofix ]