MySQL空间类型测试

Mysql空间类型介绍:

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

测试目的:

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

参考文档:

http://dev.mysql.com/doc/refman/5.1/zh/spatial-extensions-in-mysql.html

测试环境:

服务器: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.         性能测试结果

测试结论:

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

时间: 2024-12-12 11:27:14

MySQL空间类型测试的相关文章

mysql空间类型使用笔记

创建表,填充测试数据 create table geom1(id int not null auto_increment primary key,geo geometry); insert into geom1(geo)values(ST_GeomFromText('point(1 1 )',3857)); insert into geom1(geo)values(ST_GeomFromText('polygon((0 0,10 0,10 10,0 10,0 0))',3857)); selec

六、mysql字段类型选择

1.char类型字段会自动删除字符串后面所带的空格,而varchar不会 2.char比varchar快..... 3.myisam 建议 char类型,memory char跟varchar一样,都作为char类型处理:innodb建议 varchar类型 4.optimize table 清理碎片 text碎片产生实例: create table emp (id tinying(1),content text)engine=myisam; 新建测试表 insert into emp valu

MySQL索引类型总结和使用技巧以及注意事项

      索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SEL

MySQL索引类型及优化

索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable( ID INT NOT NULL, username VARCHAR(16) NOT NULL ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SELECT *

MySQL索引类型一览 让MySQL高效运行起来

索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  );   我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录

MySQL索引类型一览 让MySQL高效运行起来(转)

转自:http://www.php100.com/html/webkaifa/database/Mysql/2010/0409/4279.html 索引是快速搜索的关键.MySQL索引的建立对于MySQL的高效运行是很重要的.下面介绍几种常见的MySQL索引类型. 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NUL

MySQL索引类型 &amp; Mysql索引会失效的几种情况分析

MySQL索引类型介绍 (1)普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度:如果是BLOB和TEXT类型,必须指定 length,下同. ALTER mytable ADD INDEX [indexName] ON (username(length)) CREATE TABLE mytable( ID

MySQL索引类型&建立索引的时机&索引的不足之处

MySQL索引类型包括: 1.普通索引 这是最基本的索引,它没有任何限制.它有以下几种创建方式: ◆创建索引 CREATE INDEX indexName ON mytable(username(length)); 如果是CHAR,VARCHAR类型,length可以小于字段实际长度:如果是BLOB和TEXT类型,必须指定 length,下同. ◆修改表结构 ALTER mytable ADD INDEX [indexName] ON (username(length)) ◆创建表的时候直接指定

MySQL索引类型总结和使用技巧

引用地址:http://www.jb51.net/article/49346.htm 在数据库表中,对字段建立索引可以大大提高查询速度.假如我们创建了一个 mytable表: 复制代码 代码如下: CREATE TABLE mytable(   ID INT NOT NULL,    username VARCHAR(16) NOT NULL  ); 我们随机向里面插入了10000条记录,其中有一条:5555, admin. 在查找username="admin"的记录 SELECT