加快MySQL空间查询(指向多边形查找)

时间:2019-03-19 21:43:24

标签: mysql spatial-index

我有一个名为cities的表:

CREATE TABLE `cities` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `city` varchar(255) DEFAULT NULL,
  `state_code` varchar(10) DEFAULT NULL,
  `country_code` varchar(10) DEFAULT NULL,
  `latitude` double DEFAULT NULL,
  `longitude` double DEFAULT NULL,
  `geom` geometry NOT NULL,
  PRIMARY KEY (`id`) USING BTREE,
  KEY `country_code` (`country_code`),
  SPATIAL KEY `geom` (`geom`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

它包含大约4000行,没有任何行填充state_code字段。我正在尝试使用另一个名为geodata的表中的数据填充该字段:

CREATE TABLE `geodata` (
  `region_id` bigint(20) NOT NULL AUTO_INCREMENT,
  `country_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `state_code` varchar(10) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT '',
  `geom` geometry NOT NULL,
  PRIMARY KEY (`region_id`),
  KEY `country_code` (`country_code`),
  KEY `state_code` (`state_code`),
  SPATIAL KEY `geom` (`geom`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

该表具有〜1500行,其中包含美国各州和加拿大各省的面数据(某些州有多个条目,因为源数据将其分解为多个几何形状)。

我正在尝试查找最有效的查询,以在所有cities.geom多边形中查找geodata.geom点,然后使用来自{{1 }}表。

就像一个测试(选择,而不是更新),我尝试过:

cities.state_code

即使使用此数据子集,查询也需要9秒钟。尝试完全运行它(即没有上面的geodata子句),我在等待5分钟后放弃了。

我在做什么错?进行SELECT C.cityid_ppn, C.city, C.latitude, C.longitude, G.state_code, G.country_code FROM cities C LEFT JOIN geodata G ON ( C.country_code = G.country_code AND ST_WITHIN(C.geom, G.geom) ) WHERE G.country_code='CA' AND g.state_code='ON' ; 更新的最佳方法是什么?

0 个答案:

没有答案