松鼠乐园 松鼠乐园
  • 注册
  • 登录
  • 首页
  • 快捷入口
    • Vue
    • Tensorflow
    • Springboot
    • 语言类
      • CSS
      • ES5
      • ES6
      • Go
      • Java
      • Javascript
    • 工具类
      • Git
      • 工具推荐
    • 服务器&运维
      • Centos
      • Docker
      • Linux
      • Mac
      • MySQL
      • Nginx
      • Redis
      • Windows
    • 资源类
      • 论文
      • 书籍推荐
      • 后端资源
      • 前端资源
      • html网页模板
      • 代码
    • 性能优化
    • 测试
  • 重大新闻
  • 人工智能
  • 开源项目
  • Vue2.0从零开始
  • 广场
首页 › MySQL › MySQL Geometry扩展在地理位置计算中的效率优势

MySQL Geometry扩展在地理位置计算中的效率优势

迦娜王
2年前MySQL
1,069 0 0
由于在Geometry中,有相关自带函数和SPATIAL INDEX的性能优化,可以让某些位置计算的效率提升。以下是几种计算方法的效果对比。 1. 数据准备 首先创建一个数据表,这是一个店铺数据表,结构如下:
创建语句:
CREATE TABLE `store_geometry` ( `id` int(11) NOT NULL, `name` varchar(64) NOT NULL, `latitude` double DEFAULT NULL, `longitude` double DEFAULT NULL, `city` varchar(16) DEFAULT NULL, `district` varchar(16) DEFAULT NULL, `address` varchar(64) DEFAULT NULL, `geohash_8` varchar(16) DEFAULT NULL, `geometry` geometry DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC
然后插入数据,包含id,name,latitude,longitude,city,district,address这些字段的数值。 原始字段数值插入后,通过geometry函数计算出geometry字段的数值,并更新:
UPDATE `store_geometry` SET geometry=geomFromText(CONCAT(\'POINT(\',longitude,\' \',latitude,\')\'))
到此,数据准备工作完成。 2. 对比实例:筛选出在一定矩形范围内的店铺 对比时,表内共有100,000条左右的店铺数据。 矩形范围: max_x=121.474243 min_x=121.470724 max_y=31.234504 min_y=31.230229 2.1 方法一:使用经度和纬度字段判断是否在此区间内 我们看看对latitude,longitude2个字段做索引前后的性能对比 先在索引前查询:
SET @max_x=121.474243; SET @min_x=121.470724; SET @max_y=31.234504; SET @min_y=31.230229; SELECT * FROM `store_geometry` WHERE longitude BETWEEN @min_x AND @max_x and latitude BETWEEN @min_y AND @max_y;
查询结果有70条,耗时0.473秒
然后索引后使用相同语句查询,速度有明显加快:
2.2 方法二:使用geometry字段数据和相关几何计算函数判断是否在此区间内 同样的我们先不对geometry字段创建索引
SET @mbr=geomFromText(CONCAT(\'POLYGON\',\'((\',@min_x,\' \',@min_y,\',\',@max_x,\' \',@min_y,\',\',@max_x,\' \',@max_y,\',\',@min_x,\' \',@max_y,\',\',@min_x,\' \',@min_y,\'))\'));
SELECT * FROM `store_geometry` WHERE st_contains(@mbr, geometry);
查询结果相同,耗时如下:
然后对geometry创建索引,这里注意不要用mysql客户端工具在界面上创建,因为只能创建普通索引,没有效果。
CREATE SPATIAL INDEX i_geometry ON `store_geometry`(geometry);
然后用相同语句查询,结果如下:
3.结论 实验结果很明显,geometry扩展在进行位置计算时具有性能上的明显优势。
Geometry mysql mysql地理位置索引
0
代码实测:给redis中的key取一个正确的名字多么重要
上一篇
一幅漫画带你了解:什么是ZooKeeper?
下一篇
评论 (0)

请登录以参与评论。

现在登录
聚合文章
Servicios profesionales Organizaciones
1年前
在Gitee收获近 5k Star,更新后的Vue版RuoYi有哪些新变化?
1年前
vue3.x reactive、effect、computed、watch依赖关系及实现原理
1年前
Vue 3 新特性:在 Composition API 中使用 CSS Modules
1年前
标签
AI AI项目 css docker Drone Elaticsearch es5 es6 Geometry Go gru java Javascript jenkins lstm mysql mysql优化 mysql地理位置索引 mysql索引 mysql规范 mysql设计 mysql配置文件 mysql面试题 mysql高可用 nginx Redis redis性能 rnn SpringBoot Tensorflow tensorflow2.0 UI设计 vue vue3.0 vue原理 whistle ZooKeeper 开源项目 抓包工具 日志输出 机器学习 深度学习 神经网络 论文 面试题
相关文章
开源的SQL查询优化工具–EverSQL
mysql纵表转横表
分析一个叶大师的my.cnf自动生成工具
很高兴!终于踩到了慢查询的坑
松鼠乐园

资源整合,创造价值

小伙伴
墨魇博客 无同创意
目录
重大新闻 Centos CSS Docker ES5 ES6 Go Java Javascript Linux Mac MySQL Nginx Redis Springboot Tensorflow Vue Vue2.x从零开始 Windows 书籍推荐 人工智能 前端资源 后端资源 壁纸 开源项目 测试 论文
Copyright © 2018-2022 松鼠乐园. Designed by nicetheme. 浙ICP备15039601号-4
  • 重大新闻
  • Centos
  • CSS
  • Docker
  • ES5
  • ES6
  • Go
  • Java
  • Javascript
  • Linux
  • Mac
  • MySQL
  • Nginx
  • Redis
  • Springboot
  • Tensorflow
  • Vue
  • Vue2.x从零开始
  • Windows
  • 书籍推荐
  • 人工智能
  • 前端资源
  • 后端资源
  • 壁纸
  • 开源项目
  • 测试
  • 论文
热门搜索
  • jetson nano
  • vue
  • java
  • mysql
  • 人工智能
  • 人脸识别
迦娜王
坚持才有希望
1224 文章
35 评论
242 喜欢
  • 0
  • 0
  • Top