MySQL空间索引

  空间类型是建立在空间类型字段上的。

空间类型

  MySQL的空间类型很多,我就不逐一介绍了。重要分四大类:

  1. Geometry
  2. Curve
  3. Surface
  4. GeometryCollection

  前三种,地理、曲线、曲面都是不可实例化的。Geometry有一个子类Point, Curve有一个直接子类LineString,而Surface也只有一个子类Polygon.当然从广义上讲,Cureve, Sureface,GeometryCollection都是Geometry的子类。

SRID

  对于空间类型字段来说,一个非常重要的属性是SRID,SRID 0代表平面笛卡尔坐标系。此外4326代表地球经纬度类型,也是非常常用的,要表示经纬度,记住4326就行。

建表测试

  有了前面的知识,我们就可以开始建表测试了。空间索引要求字段非空,所以定义时需要定义not null字段。以下是SQL:

create table city (
    id integer primary key auto_increment,
    position point not null srid 4326 comment '位置',
    spatial index position_index(position)
) comment '城市';

  因为数据定义时是地球表面的坐标系,所以需要用ST_SRID函数指定SRID为4326.

insert into city(name, position) VALUE
    ('北京', ST_SRID(point(116.3912757 ,39.906217),4326) );

  查询就是比较痛苦了,代码特别长,这种代码还是用java或Python等语言生成才好:

select name, st_astext(position) from city where MBRCONTAINS(
                                 st_srid(ST_GEOMETRYFROMTEXT('polygon((100 20, 120 20, 120 40, 100 40, 100 20))'),4326),
                                 st_srid(position, 4326))

  查询结果如下:在这里插入图片描述

索引

  那么命中了索引吗?
在这里插入图片描述
  毫无疑问,是没命中索引的,我也不知道是什么原因啊,还需要继续研究。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

醒过来摸鱼

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值