基于数据库的空间索引


发布日期 : 2017-07-18 01:16:45 UTC

访问量: 178 次浏览

基于数据库的空间索引方式,与前两种索引方式有着本质的不同,
比如,存储方式、实现手段等。

1.索引实质不同

如果说基于文件的索引主要是优化I/O,
基于内存的索引主要是优化CPU计算量,
那么基于数据库的索引则既要优化I/O,
又要优化CPU计算量。
在基于文件的索引和基于内存的索引的实现过程中,
程序员可以从数据结构,存储结构等多方面灵活控制实现的细节,
而且大部分的工作都集中在数据结构,存储结构的设计上。
但是,在基于数据库的索引中,由于数据库系统本身高度封装,
用户调用接口集中在SQL语言的使用,
对数据全部操作都是通过SQL调用实现的。
对于同一个目的可以编写出不同的SQL语句,
但不同语句间的执行效率是有很大差别的。
所以,基于数据库的索引,
实质上是基于数据库的SQL语言优化,
通过适当的表结构设计,表索引设计,
以及SQL査询的设计,达到对空间数据的快速检索。
对于基于文件的索引和基于内存的索引,
都是用结构来适应算法,而对于基于数据库的索引,
是用算法来适应结构。所以,研究的起始点不同,
在基于数据库的空间索引中,必须从一定的表结构出发,
从访问SQL语句的优先级别人手,加以研究。

2.基于数据库的空间索引的特点

无须对原始数据进行结啕调整。
基于文件的索引一般要对屉始数据文件进行预处理,
最终按照自己设计的文件格式存储数据。

通用性强。一是指所有数据库的访问方式都基本类似,
使用标准的SQL语言,而基于文件方式下,不能保证访问的通用性。
二是指对要被索引的空间数据表的格式没有具体的要求,
这样对于一般的其他行业的表也可以适用。

在一定程度降低了索引设计的复杂度。
因为SQL对于基本类型的数据都提供了强大的操作支持,
所以就简化了很多工作。比如说,
排重处理是索引设计中很重要的一个环节,
但使用SQL语句设计索引,可能就不需要额外的排重处理。
比如,语句Seiect * from SpatialTable Where ID IN(1,8,9)
和语句Select * from SpatialTable Where ID IN(1,8,9,1,9),
执行结果和效率都是一样的。所以在这种情况下就不需要排重处理。

在某些方面又增加了索引设计的复杂度。
因为SQL本身是一种结构化语言,很难处理过程化的东西。
比如,SQL中不易处理嵌套循环,不能处理条件判断等。
这在一定程度上增加了索引设计的难度和复杂度。
另外还有很重要的一点,SQL语句有一定的长度限制,
这在设计索引中也是不得不考虑的问题。