PostgreSQL的R-tree和一些空间类型

 

昨天和同学试了一下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方法。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值