PostgreSQL多维空间对象——cube插件
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插件相关推荐
- PostgreSQL 多维空间几何对象 相交、包含 高效率检索实践 - cube
景 多维空间对象的几何运算,高效率检索实践. 例如我们在数据库中存储了多维几何对象,可以使用lower, upper的数组来表达,例如3维度对象: CUBE [ xmin1 ymin1 zmi ...
- 基于jQuery的对象切换插件:soChange 1.5 (点击下载)
http://www.jsfoot.com/jquery/demo/2011-09-20/192.html 所有参数: $(obj).soChange({ thumbObj:null, //导 ...
- postgresql数据库迁移timescale插件问题处理
postgresql数据库迁移timescale插件问题处理 问题说明 使用pg_dump进行数据库迁移后,开发人员表示在使用timescale的表时报错: ERROR: invalid INSERT ...
- sketchup生成面域插件_SU对象切割插件,传说中的SU模型切割神器!
小吧又来给大家安利神仙插件了,今天分享的是SketchUp中切割神器:对象切割 你看他像不像你倔强的稀疏头发呢? 插件功能介绍 对象切割 - SUAPP编号298 - 对象切割插件功能可以通过两点切割 ...
- postgresql系列之:安装postgresql数据库日志解析插件wal2json
postgresql系列之:安装postgresql数据库日志解析插件wal2json 一.下载wal2json 二.解压wal2json 三.激活postgresql数据库系统环境变量 四.编译wa ...
- 一个经典的对象级别插件的开发
先新建一个js,名为jquery.lifocuscolor.js,编写一下代码: (function($) { $.fn.extend({ "focusColor": functi ...
- PostgreSQL 分库分表 插件之一 pg_shard
MySQL的分库分表有非常多的解决方案,PostgreSQL 的分库分表方案也不少. 今天要给大家介绍的是pg_shard插件. 安装很简单, 如果你的GCC版本第一4.6,那么首先要安装一个高版本的 ...
- jQuery事件,对象以及插件
回顾 1 基本使用 2 jquery 选择器 3 筛选器 过滤 查找 串联 4 DOM 操作 内部插入 append()appendTo()prepend()prependTo() 外部插入 afte ...
- Postgresql之添加字段插件pg_migrate安装使用
最近,开发同学给大表加字段很是痛苦,加字段是DDL要锁表,尤其要加的字段是个变量,那么pg是会重写表的,可以参考我之前的文章,另外找个有个插件可以用来实现该操作.是一款叫pg_migrate的插件,地 ...
最新文章
- GROMACS运行参数之nvt.mdp文件详解
- String字符串类的获取功能
- 数据库中的范式和反范式详解!
- 国产数据库占央采九成份额
- react学习(15)-getTime selectedRowKeys是this.props取值的
- 计算机网络(七)-物理层设备
- 中国医学不能走西方道路
- 更好也更快!最先进的图像去模糊算法DeblurGAN-v2
- 【简讯】ISO确定C++的升级
- 5-格子染色(递推)
- 竟然不是马云!第一个使用支付宝的人找到了 :受赠终身钻石会员
- 【算法】剑指 Offer 39. 数组中出现次数超过一半的数字 【重刷】
- java实验二 类和对象
- python chardet_Python - chardet
- 用OpenCV创建第一个图像
- 凯撒密码 (Python实现)
- html编写在线打字通,HTML5代码打字练习、HTML5案例 - 02
- 多功能扫描仪设备 可识别护照
- 尔雅国学智慧课后答案
- 瘦子的肠道菌群和胖子的区别_胖子和瘦子的终极 PK:比基因?比运动?比肠道细菌!...