由于在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扩展在进行位置计算时具有性能上的明显优势。

方法 索引 查询耗时(秒)
使用经度和纬度字段 no index 0.473
index 0.015
使用geometry字段 no index 0.092
index 0.008

MySQL Geometry扩展在地理位置计算中的效率优势的更多相关文章

  1. FPGA计算中定标与位扩展的实现

    我不知道名字取对没有,在FPGA计算中有时往往需要在不溢出的情况下将数扩大,从而获得更好的计算精度. 比如.在一个8位宽的系统中,将x=0000_0010,算术左移m=5位之后得到xt=0100_00 ...

  2. Mysql基础代码(不断完善中)

    Mysql基础代码,不断完善中~ /* 启动MySQL */ net start mysql /* 连接与断开服务器 */ mysql -h 地址 -P 端口 -u 用户名 -p 密码 /* 跳过权限 ...

  3. PHP安装mysql.so扩展

    在PHP中mysql_connect模块已经逐渐被弃用,我在搭建环境时也没有再安装mysql扩展,但是今天在维护一个老项目时,出现报错 Fatal error: Uncaught Error: Cal ...

  4. FPGA定点小数计算中截位形式的探讨

    在FPGA设计过程中难免会碰到需要进行截位,那定点小数的计算过程中我们需要注意些什么呢? 首先,我们考虑如下计算式. sin cos 数据形式是 FIX_32_30 X Y Z 数据形式是 FIX_3 ...

  5. mysql空间扩展 VS PostGIS

    http://www.cnblogs.com/LBSer/p/3629149.html 功能 Mysql spatial extension  PostGIS 空间索引 仅MyISAM支持R树索引,I ...

  6. Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止

    就这段时间,很多人在抱怨为什么自己的MySQL又打不开问题. 就“Windows(7)上不能启动MySQL服务(位于本地计算机上)错误1067 :进程意外终止”这个问题,我想到了几种方案解决: 一.首 ...

  7. AI芯片:高性能卷积计算中的数据复用

    随着深度学习的飞速发展,对处理器的性能要求也变得越来越高,随之涌现出了很多针对神经网络加速设计的AI芯片.卷积计算是神经网络中最重要的一类计算,本文分析了高性能卷积计算中的数据复用,这是AI芯片设计中 ...

  8. PHP安装mysql.so扩展及相关PHP.ini 配置参数说明

    在PHP中mysql_connect模块已经逐渐被弃用,我在搭建环境时也没有再安装mysql扩展,但是今天在维护一个老项目时,出现报错 Fatal error: Uncaught Error: Cal ...

  9. Mysql配置文件 扩展详细配置

    目录 配置文件中有些特定参数 扩展配置 max_connections connect_timeout interactive_timeout|wait_timeout net_retry_count ...

随机推荐

  1. JSON的多样格式

    //JSON – Properties  方便前台列表显示 [{"年月":2002.01,"北京分公司":2214688,"河北分公司":3 ...

  2. 河南省多校联盟二-C

    1281: 邪能炸弹 时间限制: 1 秒  内存限制: 128 MB提交: 222  解决: 80 题目描述 正在入侵艾泽拉斯的古尔丹偶然间得到了一颗邪能炸弹,经过研究,他发现这是一颗威力极其巨大且难 ...

  3. nyoj——297(期望)

    GoroSort 时间限制:3000 ms  |  内存限制:65535 KB 难度:4   描述 Goro has 4 arms. Goro is very strong. You don't me ...

  4. Nginx启动/重启失败

    解决方案: Nginx启动或重启失败,一般是因为配置文件出错了,我们可以使用nginx -t方法查看配置文件出错的地方.也可以通过查看Nginx日志文件定位到Nginx重启失败的原因,Nginx日志文 ...

  5. Highcharts 基本区域图;Highcharts 使用负数区域图;Highcharts 堆叠区域图;Highcharts 百分比堆叠区域图

    Highcharts 基本区域图 配置 chart chart.type 配置项用于设定图表类型,默认为 "line",本章节我们使用 'area'. var chart = { ...

  6. settings.xml配置文件详解

    简单值 一半顶层settings元素是简单值,它们表示的一系列值可以配置Maven的核心行为:settings.xml中的简单顶层元素 < settings xmlns="http:/ ...

  7. Java进阶5 面向对象的陷阱

    Java进阶5 面向对象的陷阱 20131103 Java是一门纯粹面向对象的编程语言,Java面向对象是基础,而且面向对象的基本语法非常多,非常的细,需要程序员经过长时间的学习才可以掌握.本章重点介 ...

  8. nfc功能读写 demo

    点此下载//这个demo是把这个程序作为一个手机启动选择的,只要一扫到卡片就会跳转到这个Activity. 只在当前Activity中有效参考:http://blog.csdn.net/zoeice/ ...

  9. UML_04_时序图

    一.前言 时序图建模工具,推荐一个工具 https://www.zenuml.com/ 时序图是一种强调消息时序的交互图,他由对象(Object).消息(Message).生命线(Lifeline) ...

  10. web运行异常解决

    端口占用: 在dos下,输入  netstat   -ano|findstr  8080 //说明:查看占用8080端口的进程 显示占用端口的进程 taskkill  /pid  6856  /f   ...