Mycket flitig postare
|
|
Reg.datum: Jun 2010
Inlägg: 658
|
|
Mycket flitig postare
Reg.datum: Jun 2010
Inlägg: 658
|
Prestandaproblem med komplicerad SQL och 400.000 rader
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
|