为什么我的查询选择小于,大于与索引组合的查询?

时间:2012-10-20 19:11:07

标签: mysql sql

我有以下查询:

SELECT * FROM table_1 
WHERE longitude > 5.71873540775 
  AND longitude < 6.30763059225 
  AND latitude > 52.1688986788 
  AND latitude < 52.5286273212 
LIMIT 0, 50 

此查询运行速度非常慢。我在经度和纬度上尝试了组合索引和单独索引。该表包含许多行(200.000)和10列。上述查询的结果数为20。

如何让这个特定查询运行得更快?

更新1

这是执行计划:

id  select_type     table   type    possible_keys   key     key_len     ref     rows    Extra
1   SIMPLE  table_1     range   longitude,latitude  longitude   6   NULL    1401    Using where

1 个答案:

答案 0 :(得分:0)

正如ypercube所说,2个范围查询效果不佳。但也许你无论出于何种原因都无法将引擎切换到myISAM。我们可以通过将工作细分为两个分别进行查找的查询来完成此任务。

你应该在纬度字段上需要一个单独的索引,一个在经度上。

SELECT * FROM

(
SELECT * FROM table_1
WHERE longitude > 5.71873540775 
  AND longitude < 6.30763059225 
) a,
(
SELECT * FROM table_1
WHERE latitude > 52.1688986788 
  AND latitude < 52.5286273212 
) b

WHERE a.id = b.id

仍然不会像使用空间索引一样快,但可能比当前方法快一点。