PostgreSQL的R-tree和一些空间类型
2006-04-18 14:55
204 查看
昨天和同学试了一下PostgreSQL的R-tree
table 就2列:id int; mbr box;
其中在mbr上建了个r-tree索引。
当有10,000个tuple的时候,试了2个包含操作(操作符:~)和一个相交操作,系统竟然都是用的顺序查找
想想可能数据太少,于是又导入了300,000个tuple(由于在导入前已建索引,导入工作有点慢)
例1:explain select * from roadtest where mbr ~ box'(29,29),(30,30)'
输出:"Bitmap Heap Scan on roadtest (cost=6.27..1032.28 rows=362 width=36)"
" Recheck Cond: (mbr ~ '(30,30),(29,29)'::box)"
" -> Bitmap Index Scan on roadtest_mbr_rindex (cost=0.00..6.27 rows=362 width=0)"
" Index Cond: (mbr ~ '(30,30),(29,29)'::box)"
终于用了r-tree, 并且用r-tree的时间是25 ms,而不用r-tree的时间是250 ms,大概5倍。
但是不太清楚bitmap index是干吗的。
今天找了一下bitmap index是用在找相交的地方的。如下:
Bitmap Indexes : Allows more than one index per operation,but low concurrency.
SELECT * FROM search_orders
WHERE start_date > now() AND status > 0
先找到所有A={start_date > now()} 和 B={status > 0}
然后取交集
但还是不知道我上面的查询就涉及到一个条件 怎么也用了bitmap index
但是,似乎r-tree并不一直适用,
例2:explain select * from roadtest where polygon(mbr) ~ point'(29,29)'
输出:"Seq Scan on roadtest (cost=0.00..8451.52 rows=181084 width=36)"
" Filter: (polygon(mbr) ~ '(29,29)'::point)"
还是顺序查找的,ft
同时,也发现了PostgreSQL在空间数据操作的一些问题:
1。没有box~point 的操作,结果只能先把box转变为polygon,再来(如例2)
2。没有box(path)的函数
这些问题可能和PostgreSQL的定位有关,毕竟PostgreSQL不是PostGIS。
还有一个,PostgreSQL的r-tree基本是沿用了Guttman的r-tree,没有引入BulkLoad方法。
table 就2列:id int; mbr box;
其中在mbr上建了个r-tree索引。
当有10,000个tuple的时候,试了2个包含操作(操作符:~)和一个相交操作,系统竟然都是用的顺序查找
想想可能数据太少,于是又导入了300,000个tuple(由于在导入前已建索引,导入工作有点慢)
例1:explain select * from roadtest where mbr ~ box'(29,29),(30,30)'
输出:"Bitmap Heap Scan on roadtest (cost=6.27..1032.28 rows=362 width=36)"
" Recheck Cond: (mbr ~ '(30,30),(29,29)'::box)"
" -> Bitmap Index Scan on roadtest_mbr_rindex (cost=0.00..6.27 rows=362 width=0)"
" Index Cond: (mbr ~ '(30,30),(29,29)'::box)"
终于用了r-tree, 并且用r-tree的时间是25 ms,而不用r-tree的时间是250 ms,大概5倍。
但是不太清楚bitmap index是干吗的。
今天找了一下bitmap index是用在找相交的地方的。如下:
Bitmap Indexes : Allows more than one index per operation,but low concurrency.
SELECT * FROM search_orders
WHERE start_date > now() AND status > 0
先找到所有A={start_date > now()} 和 B={status > 0}
然后取交集
但还是不知道我上面的查询就涉及到一个条件 怎么也用了bitmap index
但是,似乎r-tree并不一直适用,
例2:explain select * from roadtest where polygon(mbr) ~ point'(29,29)'
输出:"Seq Scan on roadtest (cost=0.00..8451.52 rows=181084 width=36)"
" Filter: (polygon(mbr) ~ '(29,29)'::point)"
还是顺序查找的,ft
同时,也发现了PostgreSQL在空间数据操作的一些问题:
1。没有box~point 的操作,结果只能先把box转变为polygon,再来(如例2)
2。没有box(path)的函数
这些问题可能和PostgreSQL的定位有关,毕竟PostgreSQL不是PostGIS。
还有一个,PostgreSQL的r-tree基本是沿用了Guttman的r-tree,没有引入BulkLoad方法。
相关文章推荐
- 在PostgreSQL中使用日期类型时一些需要注意的地方
- Greenplum 空间(GIS)数据检索 B-Tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践
- postgresql 9.5 版本中JSONB数据类型新增的一些函数与功能
- net控件中数据导到Excel的格式 首先,我们了解一下excel从web页面上导出的原理。当我们把这些数据发送到客户端时,我们想让客户端程序(浏览器)以excel的格式读取它,所以把mime类型设为:application/vnd.ms-excel,当excel读取文件时会以每个cell的格式呈现数据,如果cell没有规定的格式,则excel会以默认的格式去呈现该cell的数据。这样就给我们提供了自定义数据格式的空间,当然我们必须使用excel支持的格式。下面就列出常用的一些格式: 1) 文本
- Greenplum 空间(GIS)数据检索 B-Tree & GiST 索引实践 - 阿里云HybridDB for PostgreSQL最佳实践
- 数据库 '***' 的日志已满。请备份该数据库的事务日志以释放一些日志空间的解决办法
- 关于MySQL数据类型的一些注意问题
- postgresql insert inet类型字段
- ArcSDE创建空间数据存储类型为ST_Geometry的要素类
- 分析器错误信息: 未能加载类型"命名空间.类"... ---小结
- PostgreSQL中的依赖类型
- CS0234: 命名空间“PetShop”中不存在类型或命名空间名称“Model“
- 关于Windows内核空间操作的一些说明
- PostgreSQL之Json类型使用
- 用vbs删除某些类型文件和磁盘空间报告的脚本
- [FxCop.设计规则]5. 避免命名空间中包含太少的类型
- 关于类型系统和类型推导的一些科普(1)
- 基本数据类型的包装类型作为参数传递,以及其他引用类型作为参数传递,以及List中值的交换的一些问题
- PostgreSQL数据类型
- 未能找到类型或命名空间名称“Coco”(是否缺少 using 指令或程序集引用)