Ho un database MySQL. Conservo le case nel database ed eseguo letteralmente solo 1 query sul database, ma ho bisogno che questa query sia eseguita super veloce, e questo è per restituire tutte le case all'interno di una casella quadrata geo latitudine & longitudine.Database: il modo migliore per eseguire le query sui dati di posizione geografica?
SELECT * FROM homes
WHERE geolat BETWEEN ??? AND ???
AND geolng BETWEEN ??? AND ???
Come è il modo migliore per me per memorizzare i miei dati geografici in modo che possa svolgere questa interrogazione di visualizzare tutti a casa all'interno della scatola geolocalizzazione il più veloce?
In sostanza:
- Am I utilizzando la migliore istruzione SQL per eseguire questa query il più veloce?
- Esiste qualche altro metodo, magari non utilizzando nemmeno un database, perché io possa interrogare il modo più veloce un risultato di case entro limiti di geolocalizzazione in scatola?
In caso aiuta, ho includono il mio schema di tabella del database di seguito:
CREATE TABLE IF NOT EXISTS `homes` (
`home_id` int(10) unsigned NOT NULL auto_increment,
`address` varchar(128) collate utf8_unicode_ci NOT NULL,
`city` varchar(64) collate utf8_unicode_ci NOT NULL,
`state` varchar(2) collate utf8_unicode_ci NOT NULL,
`zip` mediumint(8) unsigned NOT NULL,
`price` mediumint(8) unsigned NOT NULL,
`sqft` smallint(5) unsigned NOT NULL,
`year_built` smallint(5) unsigned NOT NULL,
`geolat` decimal(10,6) default NULL,
`geolng` decimal(10,6) default NULL,
PRIMARY KEY (`home_id`),
KEY `geolat` (`geolat`),
KEY `geolng` (`geolng`),
) ENGINE=InnoDB ;
UPDATE
Capisco fattore volontà spaziale nella curvatura della terra, ma io sono più interessato a restituire i dati geografici il più veloce. A meno che questi pacchetti di database spaziali non restituiscano più velocemente i dati, si consiglia di non consigliare estensioni spaziali. Grazie
UPDATE 2
Si prega di notare, che nessuno al di sotto ha davvero risposto alla domanda. Non vedo davvero l'ora di ricevere assistenza. Grazie in anticipo.
Le coordinate UTM sono una scelta migliore: il mondo non è piatto, ma l'UTM incorpora un livello di appiattimento mentre Lat/Long non lo fa affatto. –
Raccomando anche di leggere le funzionalità spaziali di MySQL: http://dev.mysql.com/doc/refman/5.0/en/spatial-extensions.html –
Postgres è un'altra alternativa db con capacità spaziale, che consiglio di utilizzare piuttosto che MySQL : http://www.postgresql.org/ –