由Oracle索引来理解ArcSDE索引
上一篇 /
下一篇 2012-10-16 16:17:37
/ 个人分类:数据库
51Testing软件测试网5c3NV"V3Ln,_U 这个题目有点怪怪的,意思就是一提到ArcSDE的性能问题,都会提到重建空间索引,本文就以Oracle的索引例子,来类比ArcSDE for Oracle的空间索引,如果能把oracle索引示例弄明白,那么对ArcSDE的索引问题应该非常好理解了。51Testing软件测试网T
A~F"Y)V!~
rW3K
nR;A!F:P0 在数据库系统中,索引是非常重要的一个对象,尤其是面对大型数据表时,索引能大大提高数据检索的速度。本节将介绍索引的原理及索引的使用。51Testing软件测试网"|t J1s)n%O&i?!hN
51Testing软件测试网8x1O[&K/Re'~o)T 索引在现实世界中最典型的例子莫过于字典检索了。用户在使用字典时,可以使用两种方式,一是逐页翻查,以获得需要查找的目标;二是根据字典的检索目录来获得目标所在的页数,然后直接在该页获得查找目标。毫无疑问,利用检索目录(索引)检索目标是更为高效的方式。
h5B3t'n*k^0b"Y|:XJ%S0
现有的主流数据库都提供了索引这一概念,Oracle也不例外。一旦在数据表的某列上建立了索引,Oracle将另辟新的空间,以存储该列上所有值与其
记录的rowid的对应关系。当用户试图以索引列作为搜索条件时,Oracle将利用索引来获得相应的rowid,并捕获该记录。
zn4\$`:UP5`4^_i0select * from people where name = 'David'; |
51Testing软件测试网6m%sN?v
当Oracle处理该查询语句时,将执行全表扫描。当搜索到第6条记录时,会发现该条记录符合搜索条件,并将该记录纳入结果集合。但是搜索并不会停止,
因为Oracle并不知道在后面的记录中是否仍然存在符合条件的记录。直至搜索完整个表,Oracle才会返回最终的结果集合。51Testing软件测试网
R2aCzg)A!g
51Testing软件测试网)F-\ZbP[W 但是,如果预先在表people的name列上创建了一个索引,那么,搜索的顺序将完全不同。创建索引的语法如下所示:
M*h-Ejbu#Z+}a0create index idx_people_name on people(name) |
*N4o G%D(n(E0@8U0 一旦索引创建,那么表中所有数据将按照字母表顺序进行分块处理,例如,以每5条记录作为一个数据块(当然,实际数据块将大得多)。分块后的数据结构如下图所示。51Testing软件测试网;`M\LqS){@u
51Testing软件测试网
[m%@y0PB!AK&m