- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在研究一个搜索系统,该系统应该检测起点和终点是否在(近 50 公里)路线上。我有许多路线作为点 [300k 行] 存储在 mysql 数据库中。
Structure
id [primary] | id_route | id_point | lat_lng_point (spatial index)
1 1 1 [GEOMETRY - 25 B]
2 1 2 [GEOMETRY - 25 B]
3 1 3 [GEOMETRY - 25 B]
4 1 4 [GEOMETRY - 25 B]
5 2 1 [GEOMETRY - 25 B]
6 2 2 [GEOMETRY - 25 B]
... ... ... ...
问题是如何最有效地选择起点和终点(或接近 50 公里)的路线 (route_id)?
我已经尝试过 union [in example](或 inner join),它可以工作,但是查询需要大约 0.4s,这太多了。 知道如何优化吗?
SELECT * FROM
(
(
SELECT DISTINCT(id_route)
FROM route_path2
WHERE ST_Contains( ST_MakeEnvelope(
Point(($lng_start+(50/111)), ($lat_start+(50/111))),
Point(($lng_start-(50/111)), ($lat_start-(50/111)))
), route_path2.lat_lng_point )
)
UNION ALL
(
SELECT DISTINCT(id_route)
FROM route_path2
WHERE ST_Contains( ST_MakeEnvelope(
Point(($lng_end+(50/111)), ($lat_end+(50/111))),
Point(($lng_end-(50/111)), ($lat_end-(50/111)))
), route_path2.lat_lng_point )
)
) AS t GROUP BY id_route HAVING count(*) >= 2
编辑:
我根据@Djeramon 的建议进行了优化,现在 0.06s 我不知道这是我能达到的最好结果,如果我有 5000 万行会怎样:)
CREATE TEMPORARY TABLE starts_on_route AS
SELECT DISTINCT id_route
FROM route_path2
WHERE ST_Contains( ST_MakeEnvelope(
Point((17.1077+(50/111)), (48.1486+(50/111))),
Point((17.1077-(50/111)), (48.1486-(50/111)))
), route_path2.lat_lng_point );
CREATE INDEX starts_on_route_inx ON starts_on_route(id_route);
SELECT DISTINCT route_path2.id_route
FROM route_path2
LEFT JOIN starts_on_route
ON route_path2.id_route = starts_on_route.id_route
WHERE ST_Contains( ST_MakeEnvelope(
Point((18.7408+(50/111)), (49.2194+(50/111))),
Point((18.7408-(50/111)), (49.2194-(50/111)))
), lat_lng_point )
AND route_path2.id_route = starts_on_route.id_route;
最佳答案
目前您正在对整个路由表运行查询两次。尝试运行第一个子查询以确定具有有效起点的所有路线,并仅在这些相关路线上运行第二个子查询。这应该可以节省大约 50% 的处理时间。
一种方法是使用临时表来存储第一个查询的结果。但是,您需要注意创建的开销,为它创建索引可能是个好主意。有关更多详细信息,请参阅 http://blog.endpoint.com/2015/02/temporary-tables-in-sql-query.html
关于mysql - 开始和结束(靠近)mysql中的路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38327463/
我正在尝试编写一个 SQL 查询,当用户提供匹配的电子邮件和登录名时,该查询将更新我数据库中的“密码”记录。我写了下面的查询来尝试实现这一点: SET @password = 'password123
我正在研究一个搜索系统,该系统应该检测起点和终点是否在(近 50 公里)路线上。我有许多路线作为点 [300k 行] 存储在 mysql 数据库中。 Structure id [primary] |
我有一个方法,如果检查两个文本字段是否存在,然后重新调整记录 ID。我的方法是这样的: int getQueryMatch(String word, String meter) { SQLit
我正在尝试创建事件计划,但 phpmyadmin 在左侧显示错误“无法识别的语句类型。 (靠近时间表)'。 MySql 版本是 10.1.8。我真的不明白这段代码或 MySql/phpmyadmin
我的问题是,当我尝试始终将 ImageView 与 TextView 和 SetText(); 放在相同的布局中时将文本写入 textview,ImageView 超出布局。是的,我知道我可以将图像放
我是 php 编程的新手。 我想应用插入查询,但出现此错误: You have an error in your SQL syntax; check the manual that correspon
我对 MySQL 很陌生,但在遇到这个障碍之前已经取得了一些成功。任何帮助将不胜感激。 我正在尝试根据表 2 中的匹配列更新表 1。MySQL 版本是 5.5。这是 2 个表(对相似的表/列名称表示歉
我几乎不需要帮助,我是 CSS 和 HTML 的新手。 我想让我的 div 非常接近没有任何边距的 body。我使用此代码,但它显示距顶部、左侧和右侧边距大约 50px 的边距是可以的,它与主体保持一
(这与 iOS 相关) 这似乎是 Xcode 9 的一个新问题。我在 Xcode 8 中没有这个问题。如果我在 Xcode 的调试控制台中查看调试输出,并且我有意滚动到靠近顶部或中间的一行,当该应用程
在 SQL Server 2012 中使用以下查询出现此错误。 在需要条件的上下文中指定的非 bool 类型表达式,靠近“RETURN”。 CREATE FUNCTION [dbo].[GetPMRe
我只想使用 python 和 sqlite 在数据库中创建一个表。但是,我需要用户提供我的数据库名称。我设法做到了这一点: #!/usr/bin/env python # -*- coding: ut
我想让box4和box1靠的很近,为什么中间有空隙? 我已经在左边漂浮了box4,为什么它不能放在左边? div.box{ width:640
我在 android 中创建了这个表: String CREATE_TABLE="CREATE TABLE " + db_NAME + " ("
我无法用 Java 编译以下代码,错误是:构造错误。怎么了? public class ExceptionsTutorial { public static void main(String[
嗨,我收到一条 SQL 错误,上面写着 E/SQLiteLog:(1)接近“每月”:语法错误 我相信这可能与我的创建表语句有关 private static final String CREATE
我在 Android 项目上工作,我在其中使用 SQLite 数据库,我编写了一个插入查询: sqliteDB_Obj.execSQL("INSERT INTO tbl_order_master (u
有什么问题? SELECT post_title FROM wp_posts WHERE post_type='tutorial' AND post_status='publish' LIMIT 3;
我正在尝试使用Hadoop Hive查询创建以下内容: create table tweets ( created_at string, entities struct >, media: array
我正在开发一个Android应用程序,其中我创建了一个 Activity ,在该 Activity 中我一直在//Session For select_category page in Activit
我正在尝试使用 Python 3.7 和 pyodbc 更新数据库中的某些值,但不断收到错误错误 - 在需要条件的上下文中指定的非 bool 类型的表达式,靠近') ' def UpdateS
我是一名优秀的程序员,十分优秀!