SpatiaLite空间索引(一)
来源:互联网 发布:当女程序员遇到问题时 编辑:程序博客网 时间:2024/05/16 14:42
SpatiaLite空间索引(一)
--SpatiaLite的入门手册翻译总结 薛冰 整理
原英文网址: http://www.gaia-gis.it/gaia-sins/spatialite-tutorial-2.3.1.html#mbr_cache
阅读SpatiaLite的入门手册第8节总结得到:
1: v.3.6.0 SQLite 以后的版本对RTree索引有稳定的实现
2:元数据表geometry_columns 中的spatial_index_enabled字段用了和一张数据表中的空间数据是否建立了控件索引并且可用。
3:SQLite RTree使用SQLite的VIRTUAL TABLE的方式实现的,一个RTree用四张表实现
· prefix (前缀)
- prefix_node
- prefix_parent
- prefix_rowid
4:SpatiaLite为了确保进入到主表中和主表关联的空间索引表的控件对象的高度一致建立了三个triggers(出发器)
5:你每次从主表中INSERT、UPDATE、DELETE一行数据你可以保证相应的索引信息也已经正确的更新了,因为活动的triggers会使这样约定生效。
6、如下不适用空间索引的按空间范围查询
SELECT tablename FROM fieldname
WHERE X(geom) > 730000 AND X(geom) < 734000
AND Y(geom) > 4810000 AND Y(geom) < 4850000;
如下是使用空间索引的按空间范围查询
SELECT tablename FROM fieldname WHERE ROWID IN
(SELECT pkid FROM idx_ tablename_geom WHERE
xmin >730000 AND xmax < 734000 AND ymin > 4810000 AND ymax < 4850000);
注意:这两种查询在数据条数少的时候性能区分是不明显的,当时如果数据量比较大(如上数据达到MILLION级)的时候速度回又几分钟变成几秒钟。
7、删除空间索引的步骤
SELECT DisableSpatialIndex('NewTowns', 'geom');
DROP TABLE idx_NewTowns_geom;
VACUUM;
第一步调用DisableSpatialIndex;这样来移除trigger,以此来停止空间索引的更新。第二步,因为第一步并不会删除RTree自身所以要显示的调用DROP TABLE以在物理层面上把索引表删除掉。第三步,最好调用一下VACUUM,用以维护数据库的高效状态。
(经过这三步的操作只是把索引和出发器删除了,而元数据表geometry_column中的相应的数据却没有删除掉,如果要删除的话需要显示的调用SQL语句来删除这些数据)
- SpatiaLite空间索引(一)
- spatialite之空间索引
- 試用 SpatiaLite(一):安裝及測試
- SpatialHadoop中空间索引系列之(一)空间索引构建
- Spatialite库NHibernate应用错误一
- 索引使用空间异常增长一例
- Oracle Spacial(空间数据库)空间索引
- 深入浅出空间索引---(1)为什么需要空间索引
- 空间索引
- 空间索引
- 空间索引
- 空间索引
- 空间索引
- 試用 SpatiaLite(二):進一步測試
- Spatialite 学习
- Spatialite使用指南
- 索引压缩(一)
- 分区索引(一)
- BitmapFactory.decodeFile
- 自写计算器
- position-fixed在jsp里面不支持的解决。。。
- 开发一个在Razor mvc下的插件(model/view)
- Java并发学习笔记(2)在java中实现多线程的启动
- SpatiaLite空间索引(一)
- ubuntu下最优秀的截屏软件scrot
- js计算器
- ubuntu更新管理器打不开
- Java笔试题:Java基础概念
- 11g R2 rac 启动时报错ora-17503的解决方法
- 统计字符串中出现最多次数的字母
- JDK动态代理
- 【dp】VK Cup 2012 Qualification Round 1 ——E