[MYSQL] query optimaliseren

Pagina: 1
Acties:

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 22:14
Voor een applicatie gebruiken we de volgende query: (mysql 5.0) om te tellen hoeveel markers binnen een bepaalde (sub)groep vallen

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


TabelRecords
mapobjecten432.144Markers met een lat/long in geometry
subgroepen159Categorisatie van markers
t_geo_sg1.082.144Koppeltabel 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
1SIMPLEmrangePRIMARY,geogeo32NULL1577Using where; Using temporary; Using filesort
1SIMPLEmsgrefsubgroep,mapobjectmapobject4_geostart_i1.m.id3Using where
1SIMPLEseq_refPRIMARYPRIMARY4_geostart_i1.msg.subgroep1Using 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

Verwijderd

Probeer de nieuwe profiler van MySql eens. Zie: http://dev.mysql.com/tech...g-new-query-profiler.html

  • orf
  • Registratie: Augustus 2005
  • Laatst online: 22:14
Bedankt. De profiler laat zien dat een kopie naar de temp table 95% van de tijd in beslag neemt. Dat had ik zelf ook wel een beetje verwacht. Kun je een kopie naar een temp table voorkomen door de indices aan te passen of misschien door de query aan te passen?