2014-12-20 98 views
1

我有,看起來像索引空間數據的MySQL表:的MySQL最近查詢

CREATE TABLE `mytable` (
    `ID` bigint(20) NOT NULL AUTO_INCREMENT, 
    `TIME` datetime DEFAULT NULL, 
    `SPOT` point NOT NULL, 
    PRIMARY KEY (`ID`), 
    SPATIAL KEY `SPOT` (`SPOT`) 
) ENGINE=MyISAM AUTO_INCREMENT=6473924464345089 DEFAULT CHARSET=utf8; 

行插入,如:

INSERT INTO mytable (time, spot) VALUES (now(), (GeomFromText('POINT(110.0 120.0)', 4326))); 

我做一個查詢,找到給出最接近的斑點latlong

SELECT id, x(spot) as longitude, y(spot) as latitude 
    FROM mytable 
    ORDER BY st_distance(GeomFromText('POINT(10.0 12.0)', 4326), spot) LIMIT 5; 

但它正在進行全表掃描,雖然'spot'被索引。

我會很感激任何幫助優化!

回答

1

Spot沒有幫助索引,MySQL仍然需要計算10.0, 12.0中的每個st_distance以便能夠對它進行排序。

如果你不想這樣快速搜索,你應該添加一個where condition來縮小足夠接近的點數,以便使用索引。

+0

非常感謝Andreas。這很有趣,因爲我有另一個查詢返回與矩形相交的行,並使用索引。我原以爲它會以類似的方式工作。 – gatti