空间索引是postgis中十分重要的功能,一个数据库中如果不支持索引那几乎是没法使用的。postgis中空间索引通过将数据组织到搜索树中来加快搜索速度,搜索树可以快速遍历以查找特定记录。

对于空间的几何图形,不是通过btree索引来加速查询,而是通过gist索引。gist索引是通过r_tree的结构来实现对空间类型数据的索引查询,其结构类似于btree索引。
r树介绍:https://zh.wikipedia.org/wiki/R%E6%A0%91
gist索引是怎么工作的呢?

比如上面这个图片,查询和黄星相交的对象,即是图中的红线,gist索引不能索引几何要素本身,而是索引几何要素的边界框(bouding box)。

所以在索引计算时,其实是先判断那些边界框和黄星所在的框相交,显然是红线和蓝线的框,然后再进行哪些直线与黄星相交的精确计算。

使用语法:

postgis=# create index idx_t_pos_1 on t_pos using gist(pos);
CREATE INDEX

对一张数据量1000的表进行全表扫描:

postgis=# select count(*) from t_pos;count
-------1000
(1 row)
postgis=# explain (analyze,buffers,timing) select * from t_pos where pos && st_astext(' POINT(73.689759 3.880185)');QUERY PLAN
-------------------------------------------------------------------------------------------------Seq Scan on t_pos  (cost=0.00..21.50 rows=1 width=36) (actual time=0.012..0.600 rows=1 loops=1)Filter: (pos && '0101000000C9C7EE02256C52402670EB6E9E0A0F40'::geometry)Rows Removed by Filter: 999Buffers: shared hit=9Planning Time: 0.231 msExecution Time: 0.612 ms
(6 rows)

加上索引,使用索引查询:

postgis=# explain (analyze,buffers,timing) select * from t_pos where pos && st_astext(' POINT(73.689759 3.880185)');QUERY PLAN
--------------------------------------------------------------------------------------------------------------------Index Scan using idx_t_pos_1 on t_pos  (cost=0.14..8.16 rows=1 width=36) (actual time=0.057..0.058 rows=1 loops=1)Index Cond: (pos && '0101000000C9C7EE02256C52402670EB6E9E0A0F40'::geometry)Buffers: shared hit=3Planning Time: 0.228 msExecution Time: 0.074 ms
(5 rows)

可以看到性能有了明显的提升!

postgis——空间索引相关推荐

  1. PostGIS空间索引

    目录 一.空间索引是怎样工作的? 二.纯索引查询 三.分析 四.清理(VACUUM) 五.相关函数 回想一下,空间索引是空间数据库的三个关键特性之一.空间索引使得使用空间数据库存储大型数据集成为可能. ...

  2. geohash vs PostGIS

    标签 PostgreSQL , PostGIS , GEOHASH , 经纬度 , geometry , geography 背景 业界有几种地理位置的表示方法. 通常我们使用经纬度表示地球上的位置, ...

  3. mysql空间扩展 VS PostGIS

    http://www.cnblogs.com/LBSer/p/3629149.html 功能 Mysql spatial extension  PostGIS 空间索引 仅MyISAM支持R树索引,I ...

  4. mysql gis vs postgis_mysql空间扩展VSPostGIS

    功能 Mysql spatial extension PostGIS 空间索引 仅MyISAM支持R树索引,InnoDB不支持 GIST树索引(R树的变种) 支持的空间类型 仅二维数据 二维.三维以及 ...

  5. mysql lbs_LBS类数据服务对比分析 (一)

    移动互联网络的飞速发展,导致移动应用类服务层出不穷,其中很重要一类就是LBS(Location Based Services)--位置定位服务,在此基础上出现了很多面向生活服务类的热门App应用,如: ...

  6. MySQL GIS功能介绍

    个人网站:https://www.lovebetterworld.com/ 往后余生,只想分享一些干货,分享一些工作,学习当中的笔记.总结,并帮助需要帮助的任何人,关注我,大家一起来学习吧! 一.My ...

  7. mysql8对gis的支持

    从MySQL4.1开始,MySQL就支持了基本空间数据类型以及一部分的空间对象函数,但是对GIS功能的支持非常有限:随着不断发展,MySQL8对GIS功能的支持已经比较丰富了,本文将基于MySQL8. ...

  8. 数据库案例集锦 - 开发者的《如来神掌》

    标签 PostgreSQL , PG DBA cookbook , PG Oracle兼容性 , PG 架构师 cookbook , PG 开发者 cookbook , PG 应用案例 背景 「剑魔独 ...

  9. PostgreSQL 空间st_contains,st_within空间包含搜索优化 - 降IO和降CPU(bound box)

    标签 PostgreSQL , st_contains , st_within , 空间包含 , 空间bound box , GiST索引 , 空间索引结构 , IO放大 , BOUND BOX放大 ...

最新文章

  1. iptables如何开放被动模式的FTP服务
  2. 骑士人才linux伪静态,骑士人才CMS伪静态规则
  3. Effect of Switchovers, Failovers, and Control File Creation on Backups
  4. VPTR的分步初始化
  5. Nebula3学习笔记(6): 网络系统
  6. 移动端适配--flexible.js
  7. 【Java每日一题】20170309
  8. 微课系列(二):列表方法sort()和内置函数sorted()的稳定排序特点
  9. python基础教程期末考试题库_PYTHON语言应用试题题目及答案,课程2020最新期末考试题库,章节测验答案...
  10. 前端静态资源缓存最优解以及max-age的陷阱
  11. 《帝国时代III黄金版》宣布
  12. scratch-blocks教程(一)
  13. 使用两块大小不同的硬盘实现Raid1,实现总可用容量不低于最大硬盘的容量
  14. d调 简谱 一次就好
  15. 小字辈(左子右兄加强版)(C语言版)
  16. 汇编二进制转换ascii_将二进制数字转换为ASCII数字| 8085微处理器
  17. java在线制作视频,调用ffmpeg(一)
  18. overloading(重载)与overriding(重写)的区别:
  19. 目标院校参考书目如何获取?
  20. Matlab之print,fprint,fscanf,disp函数(转)

热门文章

  1. 我跪着看完了这些神仙渗透测试面试题!
  2. 【XNTP】张鹏 :从P2P到万物互联服务框架
  3. CTF-实验吧-认真你就输了
  4. 54项大数据关键模型
  5. Hdu1874 最短路径_畅通工程续
  6. 美甲店的生意一直不好?可以试试用小程序宣传推广
  7. 加减号在google搜索中的应用
  8. 03【托业口语】- PART3 Respond to questions
  9. Vivido添加pynq-Z2开发板
  10. 好用的一些小插件小工具