当前位置:   article > 正文

MySQL空间索引

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 '城市';
  • 1
  • 2
  • 3
  • 4
  • 5

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

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

  查询就是比较痛苦了,代码特别长,这种代码还是用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))
  • 1
  • 2
  • 3

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

索引

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/810521
推荐阅读
相关标签
  

闽ICP备14008679号