mysql 空间 类型_MySQL空间类型测试

Mysql空间类型介绍:

MySQL支持空间扩展,允许生成、保存和分析地理特征。这些特征可用于MyISAM、InnoDB、NDB、BDB和ARCHIVE表(但是,ARCHIVE引擎不支持索引功能,因此,不能为ARCHIVE列中的空间列编制索引)。

测试目的:

想用mysql的专用空间类型来代替整数类型存储坐标信息,从而在地图搜索的时候提高效率。

参考文档:

测试环境:

服务器:PowerEdge R710

内存:32G

软件:percona mysql 5.5.28

测试:

一、功能测试

1.建立空间类型的表和×××类型的表,分别保存的数据为user_id,x轴坐标,y轴坐标

CREATE TABLE `testa` (

`uid` int(11) DEFAULT NULL,

`p` point NOT NULL ,

SPATIAL KEY `p` (`p`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1COLLATE=latin1_bin

CREATE TABLE `testb` (

`uid` int(11) DEFAULT NULL,

`x` int(11) DEFAULT NULL,

`y` int(11) DEFAULT NULL,

Key `x`(`x`)

) ENGINE=MyISAM DEFAULT CHARSET=latin1COLLATE=latin1_bin

2.生成测试数据

awk'BEGIN{srand();for(i=1;i<=100000;i++)printn++,int(rand()*1000),int(rand()*1000)}' > a.txt

3.将测试数据导入到空间类型与整数类型的表中

cat a.txt|awk '{print "INSERT INTOtesta VALUES ("$1",GeomFromText(\"POINT("$2""$3")\"));"}'|mysql

cat a.txt|awk '{print "INSERT INTOtestb VALUES("$1","$2","$3")\"));"}'|mysql

4.查看数据是否插入成功

mysql> select uid,astext(p) fromtesta limit 3;

+------+----------------+

| uid  |astext(p)      |

+------+----------------+

|    0 | POINT(140 955) |

|    1 | POINT(912 377) |

|    2 | POINT(63561)  |

+------+----------------+

mysql> select uid,x,y from testblimit 3;

+------+----------------+---+

| uid  | x    | y |

+------+----------------+---+

|    0 | 140  | 955|

|    1 | 912  | 377|

|    2 | 635  | 61 |

+------+----------------+---+

二、性能测试

1.用同样的条件对空间类型的表和×××的表进行查询操作

mysql> SELECT count(uid) FROM testa WHERE Intersects(p, GeomFromText('POLYGON((0 0, 300 0, 300 300, 0 300, 0 0))') ) and uid>1000anduid<=2000;

+------------+

| count(uid) |

+------------+

|         93 |

+------------+

1 row in set (1.67 sec)

mysql> SELECT count(uid) FROM testb WHERE x>=0 andx<=300 and y>=0 and y<=300 and uid>1000 anduid<=2000;

+------------+

| count(uid) |

+------------+

|         93 |

+------------+

1 row in set (1.28 sec)

2.性能测试结果

b2b97baff30791630ffb2403ffe0b7ba.png

测试结论:

mysql的空间类型还不够成熟,用作坐标查询没有优势比用×××存储查询速度要慢,而且业界使用的也很少,所以地图搜索不能使用该类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值