【发布时间】:2015-05-17 12:10:09
【问题描述】:
您好,我有一个包含 500k 记录和以下列的表:
id、id_route、id_point、lat、lng、距离、状态
我想从我定义的点选择半径内的 id_routes。
没问题
SELECT id_route
FROM route_path
WHERE (((lat < 48.7210 + 2.0869) AND
(lat > 48.7210 - 2.0869)) AND
((lng < 21.2578 + 2.0869) AND
(lng > 21.2578 - 2.0869)))
GROUP BY id_route
但根据 PHPmyadmin,它需要 0.2 秒。这非常重要,因为我要构建庞大的查询,而这才刚刚开始。
我也有关于 id_route 的索引。
主键是 id,架构是 MyISAM
选择的解释:
身份证 选择类型 桌子 类型 可能的键 钥匙 key_len 参考 行 额外的
1 简单的 路由路径 全部 空值 空值 空值 空值 506902 使用哪里;使用临时的;使用文件排序
我怎样才能减少时间,我觉得 500K 没有太多的记录来做这么长时间?谢谢
【问题讨论】:
-
架构是什么?什么的主键?什么是索引?你试过检查计划吗?
-
请显示 EXPLAIN SELECT 的输出 ...
-
这是一个不寻常的“径向距离”函数!除了性能优势之外,GROUP BY 主要用于聚合函数。
-
主键是 id,架构是 MyISAM。
-
@mech EXPLAIN of SELECT: id select_type table type possible_keys key key_len ref rows Extra 1 SIMPLE route_path ALL NULL NULL NULL NULL 506902 使用where;使用临时的;使用文件排序
标签: mysql