CUBE是pg内置的插件,实现了一种数据类型cube来表示多维立方体。CUBE是一个多维数据类型,支持两种多维类型:多维POINT、区间(左下+右上)。以及这些几何对象的几何特性搜索和计算(方位搜索、距离计算),这些搜索都支持GiST索引。

例子:
求多维点的距离:
–欧几里得距离

bill@bill=>select '(1,2,3,4)'::cube <-> '(2,2,3,10)'::cube ;  ?column?
-------------------6.082762530298219
(1 row)

–切比雪夫距离(分别每个坐标的距离,取最大值)

bill@bill=>select '(1,2,3,4)'::cube <=> '(2,2,3,10)'::cube ;  ?column?
----------6
(1 row)

–直线距离(分别每个坐标的距离,求和)

bill@bill=>select '(1,2,3,4)'::cube <#> '(2,2,3,10)'::cube ;  ?column?
----------7
(1 row)

使用cube类型进行索引查询:
对于cube类型我们可以使用gist空间索引来进行索引查询。

创建测试表:

bill@bill=>create table test2 (
bill(#   id int primary key,
bill(#   cb cube
bill(# );
CREATE TABLE

插入数据:

bill@bill=>insert into test2 select generate_series(1,100000),cube(array[random()*10,random()*100,random()*1000],array[random()*10,random()*100,random()*1000]);
INSERT 0 100000bill@bill=>\dt+ test2 List of relationsSchema | Name  | Type  | Owner |  Size   | Description
--------+-------+-------+-------+---------+-------------bill   | test2 | table | bill  | 9120 kB |
(1 row)

创建gist索引:
需要注意gist索引很大,我们的表实际只有1MB不到,但是索引竟然有464MB!

bill@bill=>create index idx_t2 on test2 using gist(cb);
CREATE INDEXbill@bill=>\di+ idx_t2List of relationsSchema |  Name  | Type  | Owner | Table |  Size  | Description
--------+--------+-------+-------+-------+--------+-------------bill   | idx_t2 | index | bill  | test2 | 464 MB |
(1 row)

包含操作的查询性能:

bill@bill=>explain (analyze,verbose,timing,costs,buffers) select * from test2 where cb @> cube '[(7,67,548), (3,72,389)]';        QUERY PLAN
---------------------------------------------------------------------------------------------------------------------Bitmap Heap Scan on bill.test2  (cost=79.18..196.86 rows=100 width=60) (actual time=5.892..8.220 rows=2399 loops=1)Output: id, cbRecheck Cond: (test2.cb @> '(7, 67, 548),(3, 72, 389)'::cube)Heap Blocks: exact=1005Buffers: shared hit=2822->  Bitmap Index Scan on idx_t2  (cost=0.00..79.16 rows=100 width=0) (actual time=5.720..5.721 rows=2399 loops=1)Index Cond: (test2.cb @> '(7, 67, 548),(3, 72, 389)'::cube)Buffers: shared hit=1817Planning Time: 0.303 msExecution Time: 8.572 ms
(10 rows)

相交查询性能:

bill@bill=>explain (analyze,verbose,timing,costs,buffers) select * from test2 where cb && cube '[(7,67,918), (9,32,399)]';         QUERY PLAN
-------------------------------------------------------------------------------------------------------------------------Bitmap Heap Scan on bill.test2  (cost=391.68..857.07 rows=500 width=60) (actual time=31.379..37.760 rows=32931 loops=1)Output: id, cbRecheck Cond: (test2.cb && '(7, 67, 918),(9, 32, 399)'::cube)Heap Blocks: exact=1137Buffers: shared hit=24210->  Bitmap Index Scan on idx_t2  (cost=0.00..391.56 rows=500 width=0) (actual time=31.224..31.224 rows=32931 loops=1)Index Cond: (test2.cb && '(7, 67, 918),(9, 32, 399)'::cube)Buffers: shared hit=23073Planning Time: 0.107 msExecution Time: 39.620 ms
(10 rows)

包含点的查询:

bill@bill=>explain (analyze,verbose,timing,costs,buffers) select * from test2 where cb @> cube '(5,23,908)';  QUERY PLAN
---------------------------------------------------------------------------------------------------------------------Bitmap Heap Scan on bill.test2  (cost=79.18..196.86 rows=100 width=60) (actual time=7.135..8.711 rows=2944 loops=1)Output: id, cbRecheck Cond: (test2.cb @> '(5, 23, 908)'::cube)Heap Blocks: exact=1044Buffers: shared hit=4650->  Bitmap Index Scan on idx_t2  (cost=0.00..79.16 rows=100 width=0) (actual time=6.986..6.986 rows=2944 loops=1)Index Cond: (test2.cb @> '(5, 23, 908)'::cube)Buffers: shared hit=3606Planning Time: 0.074 msExecution Time: 8.921 ms
(10 rows)

参考链接:https://www.postgresql.org/docs/12/cube.html

PostgreSQL多维空间对象——cube插件相关推荐

  1. PostgreSQL 多维空间几何对象 相交、包含 高效率检索实践 - cube

    景 多维空间对象的几何运算,高效率检索实践. 例如我们在数据库中存储了多维几何对象,可以使用lower, upper的数组来表达,例如3维度对象: CUBE  [  xmin1  ymin1  zmi ...

  2. 基于jQuery的对象切换插件:soChange 1.5 (点击下载)

    http://www.jsfoot.com/jquery/demo/2011-09-20/192.html 所有参数: $(obj).soChange({     thumbObj:null, //导 ...

  3. postgresql数据库迁移timescale插件问题处理

    postgresql数据库迁移timescale插件问题处理 问题说明 使用pg_dump进行数据库迁移后,开发人员表示在使用timescale的表时报错: ERROR: invalid INSERT ...

  4. sketchup生成面域插件_SU对象切割插件,传说中的SU模型切割神器!

    小吧又来给大家安利神仙插件了,今天分享的是SketchUp中切割神器:对象切割 你看他像不像你倔强的稀疏头发呢? 插件功能介绍 对象切割 - SUAPP编号298 - 对象切割插件功能可以通过两点切割 ...

  5. postgresql系列之:安装postgresql数据库日志解析插件wal2json

    postgresql系列之:安装postgresql数据库日志解析插件wal2json 一.下载wal2json 二.解压wal2json 三.激活postgresql数据库系统环境变量 四.编译wa ...

  6. 一个经典的对象级别插件的开发

    先新建一个js,名为jquery.lifocuscolor.js,编写一下代码: (function($) { $.fn.extend({ "focusColor": functi ...

  7. PostgreSQL 分库分表 插件之一 pg_shard

    MySQL的分库分表有非常多的解决方案,PostgreSQL 的分库分表方案也不少. 今天要给大家介绍的是pg_shard插件. 安装很简单, 如果你的GCC版本第一4.6,那么首先要安装一个高版本的 ...

  8. jQuery事件,对象以及插件

    回顾 1 基本使用 2 jquery 选择器 3 筛选器 过滤 查找 串联 4 DOM 操作 内部插入 append()appendTo()prepend()prependTo() 外部插入 afte ...

  9. Postgresql之添加字段插件pg_migrate安装使用

    最近,开发同学给大表加字段很是痛苦,加字段是DDL要锁表,尤其要加的字段是个变量,那么pg是会重写表的,可以参考我之前的文章,另外找个有个插件可以用来实现该操作.是一款叫pg_migrate的插件,地 ...

最新文章

  1. GROMACS运行参数之nvt.mdp文件详解
  2. String字符串类的获取功能
  3. 数据库中的范式和反范式详解!
  4. 国产数据库占央采九成份额
  5. react学习(15)-getTime selectedRowKeys是this.props取值的
  6. 计算机网络(七)-物理层设备
  7. 中国医学不能走西方道路
  8. 更好也更快!最先进的图像去模糊算法DeblurGAN-v2
  9. 【简讯】ISO确定C++的升级
  10. 5-格子染色(递推)
  11. 竟然不是马云!第一个使用支付宝的人找到了 :受赠终身钻石会员
  12. 【算法】剑指 Offer 39. 数组中出现次数超过一半的数字 【重刷】
  13. java实验二 类和对象
  14. python chardet_Python - chardet
  15. 用OpenCV创建第一个图像
  16. 凯撒密码 (Python实现)
  17. html编写在线打字通,HTML5代码打字练习、HTML5案例 - 02
  18. 多功能扫描仪设备 可识别护照
  19. 尔雅国学智慧课后答案
  20. 瘦子的肠道菌群和胖子的区别_胖子和瘦子的终极 PK:比基因?比运动?比肠道细菌!...

热门文章

  1. 银联网关支付demo
  2. 建土赛事——力学架构 下篇
  3. YTUOJ 3920复读机
  4. 搭建 discus 论坛
  5. 喜欢的一首歌(小曲儿唱的别有一番趣味)
  6. 软件工程中软件需求分析
  7. 全国大学生女子足球锦标赛
  8. 银河麒麟操作系统开机root自动登录
  9. 利用博客提交作业的程序设计课程实践模式
  10. 服务器中了勒索病毒怎么办?服务器中了勒索病毒怎么处理解决?