mysql - 空间索引表现不佳
问题描述
我最近更改了托管计划。数据库通过
服务器类型: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 表被正确填充。
一个主意 ?
解决方案
推荐阅读
- php - 这个 SHA256 散列公式是否正确?
- azure - AuthorizationFailed 未知主体
- date - 如何从返回视图中隐藏日期时间?
- r - How to fill histogram by different columns?
- python - 这在 Python 脚本中意味着什么?
- azure - 如何克服 ACL 和防火墙的这个错误?
- java - 最少的参数类型
- vue.js - vue在for循环中绑定html数据属性
- python - 我得到 PermissionError (Errno 13) 权限被拒绝为“Hello World”项目创建可执行文件
- r - 使用 R 折叠具有相同名称的几何图形