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))

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

索引

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

相关推荐

  1. MySQL索引

    2024-07-11 10:40:03       52 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-11 10:40:03       101 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-11 10:40:03       108 阅读
  3. 在Django里面运行非项目文件

    2024-07-11 10:40:03       91 阅读
  4. Python语言-面向对象

    2024-07-11 10:40:03       98 阅读

热门阅读

  1. 人工智能在自动驾驶中的目标检测研究

    2024-07-11 10:40:03       29 阅读
  2. 编程语言 Public:深度解析与未来展望

    2024-07-11 10:40:03       30 阅读
  3. 【SQL】InnoDB中的行锁

    2024-07-11 10:40:03       30 阅读
  4. 编程什么好用:深入剖析编程工具的选择与运用

    2024-07-11 10:40:03       27 阅读
  5. C++引用和指针的区别

    2024-07-11 10:40:03       24 阅读
  6. 3.数组基础

    2024-07-11 10:40:03       21 阅读
  7. Docker 日志丢失 - 解决方案

    2024-07-11 10:40:03       23 阅读
  8. 3D Web开发新篇章:threelab探索之旅

    2024-07-11 10:40:03       22 阅读
  9. 外科休克病人的护理

    2024-07-11 10:40:03       26 阅读