Voor een applicatie gebruiken we de volgende query: (mysql 5.0) om te tellen hoeveel markers binnen een bepaalde (sub)groep vallen
De query is redelijk snel (nu) maar ik zie 'm graag ook nog snel met veel meer records.
dit geeft een explain:
Using temporary; Using filesort moet denk ik nog wel te optimaliseren zijn. We hebben verschillende tests gedaan met force index, verschillende (samengestelde) indices en STRAIGHT JOINS om de volgorde af te dwingen. Alle aanpassingen gaven slechtere resultaten dan nu. Iemand suggesties om deze query te optimaliseren?
resultset caching kan niet vanwege de verschillende lat/longs
SQL:
1
2
3
4
5
6
7
| SELECT s.id, COUNT(1) as aantal FROM subgroepen s INNER JOIN t_geo_sg msg ON s.id = msg.subgroep INNER JOIN mapobjecten m ON m.id = msg.mapobject WHERE zoom > 12 AND Intersects(geo, GeomFromText("Linestring(51.78208851000083 5.477091979980469, 51.67732613984962 5.336265563964844)")) GROUP BY s.id |
| Tabel | Records | |
| mapobjecten | 432.144 | Markers met een lat/long in geometry |
| subgroepen | 159 | Categorisatie van markers |
| t_geo_sg | 1.082.144 | Koppeltabel voor de 2 bovenstaande |
De query is redelijk snel (nu) maar ik zie 'm graag ook nog snel met veel meer records.
dit geeft een explain:
| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |
| 1 | SIMPLE | m | range | PRIMARY,geo | geo | 32 | NULL | 1577 | Using where; Using temporary; Using filesort |
| 1 | SIMPLE | msg | ref | subgroep,mapobject | mapobject | 4 | _geostart_i1.m.id | 3 | Using where |
| 1 | SIMPLE | s | eq_ref | PRIMARY | PRIMARY | 4 | _geostart_i1.msg.subgroep | 1 | Using index |
Using temporary; Using filesort moet denk ik nog wel te optimaliseren zijn. We hebben verschillende tests gedaan met force index, verschillende (samengestelde) indices en STRAIGHT JOINS om de volgorde af te dwingen. Alle aanpassingen gaven slechtere resultaten dan nu. Iemand suggesties om deze query te optimaliseren?
resultset caching kan niet vanwege de verschillende lat/longs