首页 > 解决方案 > 空间索引表现不佳

问题描述

我最近更改了托管计划。数据库通过

服务器类型:Percona Server 服务器版本:5.6.40-84.0-log - Percona Server (GPL),Release 84.0,Revision 47234b3

服务器类型:MariaDB 服务器版本:10.3.23-MariaDB-1:10.3.23 + maria ~ stretch-log - mariadb.org 二进制分发

从那以后,我遇到了几个令人讨厌的案例。

这是一个:

多年来,我一直在 myISAM 表上使用空间索引。

我管理两种类型的几何图形;点和多边形。

例如,在旧服务器上,一个自动夜间任务在 3 分钟内执行了以下请求

INSERT INTO wnat_refresh_maille_in_use 
SELECT distinct wnat_mailles_geometries.unik
FROM wnat_gps, wnat_mailles_geometries
WHERE MBRCONTAINS(wnat_mailles_geometries.g_coordonnees_spacial, wnat_gps.p_coordonnees_spacial) AND in_use_by_lieudit=0

在 wnat_mailles_geometries 表中有 1200 万行,g_coordonnees_spacial 列包含多边形几何。wnat_gps 表包含 800,000 行,p_coordonnees_spacial 列包含点。

在新服务器上,请求在 20 分钟后超时。

为了摆脱它,我修改了代码以执行页面 n 次(限制 100,000 跳过这很好),以便在 wnat_gps 表的每行执行一个 INSERT。

INSERT INTO wnat_refresh_maille_in_use SELECT distinct
     wnat_mailles_geometries.unik
  FROM wnat_mailles_geometries
    WHERE ST_CONTAINS(wnat_mailles_geometries.g_coordonnees_spacial, ST_GEOMFROMTEXT('".$row["asText"]."')) AND in_use_by_lieudit=0";

因此,在页面上 8 次迭代和 30 分钟后,wnat_refresh_maille_in_use 表被正确填充。

一个主意 ?

标签: mysqlindexingspatial

解决方案


推荐阅读