FAQ |
Kalender |
![]() |
#1 | ||
|
|||
Mycket flitig postare
|
Nu fick jag en svårare nöt att knäcka. Jag har en tabell som innehåller ca 400.000 rader och alla (nästan) har en latitud/longitud koordinat. Jag vill då skriva frågor som innebär att lista de närmaste raderna inom en viss radie utifrån en given punkt. Exempel:
SELECT *, ( 3959 * ACOS( COS( RADIANS(AAA) ) * COS( RADIANS( LAT ) ) * COS( RADIANS( LONG ) - RADIANS(OOO) ) + SIN( RADIANS(AAA) ) * SIN( RADIANS( LAT ) ) ) ) AS distance FROM tabellen_ifråga HAVING distance < X ORDER BY distance Där är AAA latituden, OOO är longituden och X är avståndet (radien) utifrån utgångspunkten. Problemet är inte frågan i sig (utan den får de svar den ska ha), utan mitt problem är prestandan. Att köra ovannämnda fråga kan ta ca 1 sekund och i vissa fall kan jag behöva att köra den 3 gånger på en sidvisning. Tabeller ser ut enl. nedan: ID - PK LONG - VARCHAR(15) - INDEX LAT - VARCHAR(15) - INDEX Exempel på en koordinat kan vara: LONG: -84.093177 LAT: 35.922934 Jag kör MySQL 5.1.58 och MyISAM som db-motor (standard) Vad kan jag göra? Jag kör detta på en vanlig VPS hos Glesys med Debian 6, 64-bit Tips mottages gladligen! Senast redigerad av gregoff den 2011-11-30 klockan 21:38 Anledning: stavfel |
||
![]() |
![]() |
|
|