news 2026/6/25 18:15:15

r树索引、mysql对r树的支持

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
r树索引、mysql对r树的支持

文章目录

    • 案例
      • 建表
      • 插入数据
      • 查询
        • 基础查询:查看刚才插入的数据
        • 范围查询:找出某个矩形区域内的店铺
        • 进阶查询:查找离我最近的店铺(KNN 最近邻搜索)
      • 常用空间类型

mysql本身并不支持r树索引,但是支持空间索引,底层就是r树。

注意经纬度的顺序,维度在前,经度在后,当然也可以指定。

案例

建表

CREATETABLEshops(idINTPRIMARYKEY,nameVARCHAR(100),-- 使用 POINT 空间类型存储经纬度,并指定 SRID 4326(WGS84标准坐标系)locationPOINTNOTNULL,-- 创建空间索引(底层就是 R树索引)SPATIALINDEX(location))ENGINE=InnoDB;

注:point类型从dbeaver界面新增是找不到的,就用sql新增吧。

插入数据

INSERTINTOshops(id,name,location)VALUES(1,'天安门纪念品店',ST_GeomFromText('POINT(39.909 116.397)',4326)),(2,'故宫咖啡厅',ST_GeomFromText('POINT(39.915 116.390)',4326)),(3,'王府井百货',ST_GeomFromText('POINT(39.911 116.410)',4326)),(4,'西单大悦城',ST_GeomFromText('POINT(39.910 116.373)',4326));

查询

基础查询:查看刚才插入的数据

因为空间数据在 MySQL 内部是二进制存储的,直接 SELECT 会看不懂,所以需要用 ST_AsText 函数把它转回我们能看懂的文本格式。

SELECTid,name,ST_AsText(location)ASlocation_textFROMshops;
范围查询:找出某个矩形区域内的店铺

假设我们要框选北京二环内的一小块区域,看看这里面有哪些店。我们可以用 MBRContains 函数,它会利用 R树索引,快速找出落在指定“最小包围矩形(MBR)”内的点:

SELECTname,ST_AsText(location)FROMshopsWHEREMBRContains(-- 坐标顺序改为:纬度在前,经度在后 (左下 -> 右下 -> 右上 -> 左上 -> 回到左下)ST_GeomFromText('POLYGON((39.90 116.38, 39.90 116.40, 39.92 116.40, 39.92 116.38, 39.90 116.38))',4326),location);
进阶查询:查找离我最近的店铺(KNN 最近邻搜索)
SELECTname,-- 计算球面距离,结果单位是米ST_Distance_Sphere(location,ST_GeomFromText('POINT(39.903 116.428)',4326))ASdistance_in_metersFROMshopsORDERBYlocation<=>ST_GeomFromText('POINT(39.903 116.428)',4326)LIMIT2;

常用空间类型

上述案例用的point,但是point并不是唯一的空间索引,常见的如下:

类型含义典型应用场景
POINT单个坐标点门店位置、打车起点/终点
LINESTRING连续的线段道路、河流、运动轨迹
POLYGON封闭的多边形区域行政区划、商圈、园区范围
MULTI***多个同类型对象的集合群岛(多面)、公交站点群(多点)
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/25 18:12:43

10大好用WMS系统盘点!2026年企业WMS系统选型实战指南

在2026年企业数字化转型的浪潮中&#xff0c;WMS系统&#xff08;仓储管理系统&#xff09;已经成为提升供应链效率的核心工具。面对市面上琳琅满目的WMS系统&#xff0c;企业如何进行精准的WMS系统选型&#xff0c;成为了管理者面临的一大难题。为了帮助大家避坑&#xff0c;本…

作者头像 李华
网站建设 2026/6/23 19:26:59

Go语言WebSocket实时通信实战:从基础到广播机制

Go语言WebSocket实时通信实战&#xff1a;从基础到广播机制 引言 WebSocket是一种全双工通信协议&#xff0c;允许服务器主动向客户端推送数据。Go语言的gorilla/websocket库提供了优秀的WebSocket支持。本文将深入探讨Go语言的WebSocket编程实践&#xff0c;帮助您构建实时通信…

作者头像 李华
网站建设 2026/6/23 19:42:13

One API 部署教程(上):本地部署完整指南

前言 One API 是一个开源的 AI API 聚合管理平台,可以让你用一个统一的接口调用多个 AI 平台的 API(如 OpenAI、DeepSeek、通义千问等)。 为了让大家能全面了解 One API,我决定写一个系列教程: One API 部署教程(上):本地部署完整指南(本文) One API 部署教程(中)…

作者头像 李华
网站建设 2026/6/23 19:27:00

从TAU流程看5G网络演进:4G的“寻人”机制在5G NSA/SA下有何变化?

从TAU流程看5G网络演进&#xff1a;4G的“寻人”机制在5G NSA/SA下有何变化&#xff1f; 在移动通信领域&#xff0c;位置管理一直是网络架构设计的核心挑战之一。想象一下&#xff0c;当你的手机从一个街区移动到另一个街区时&#xff0c;网络如何精确地找到你并保持连接&…

作者头像 李华
网站建设 2026/6/23 19:27:17

信号处理与行为金融视角下的股价波动与量化投资建模方法【附代码】

✨ 长期致力于股价波动模型、信号处理、行为金融、机器学习、量化投资研究工作&#xff0c;擅长数据搜集与处理、建模仿真、程序编写、仿真设计。 ✅ 专业定制毕设、代码 ✅ 如需沟通交流&#xff0c;点击《获取方式》 &#xff08;1&#xff09;多尺度非线性模态分解与波动成分…

作者头像 李华