访问量: 93 次浏览
基于数据库的空间索引方式,与前两种索引方式有着本质的不同, 比如,存储方式、实现手段等。
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语句有一定的长度限制, 这在设计索引中也是不得不考虑的问题。