背景
在SDE地理空间库中存储地理数据是GIS应用在数据管理方面经常使用的方式,但是当某一个图层的数据量比较大的时候,往往会发现,图层的浏览和查询会变慢。可优化的方式很多,这里就讲一种比较实用的方式,表分区。下面以Oracle为例,其他的数据库类似。
Oracle提供了分区技术以支持VLDB(Very Large Data Base),分区表通过对分区列的判断,把记录分别存放在不同的表空间中,但是这个过程对于上层的应用来说是透明的。 什么时候需要分区表,Oracle官方的2个建议:
(1)Tables greater than 2GB should always be considered for partitioning.
(2)Tables containing historical data, in which new data is added into the newest partition. A typical example is a historical table where only the current month's data is updatable and the other 11 months are read only.
分区提供以下优点:
(1)提高可用性:数据分散到各个分区中,减少了数据全部损坏的风险,如果表的某个分区出现故障,表在其他分区的数据仍然可用;
(2)便于维护:便于对单独的分区进行备份和恢复;如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
(3)均衡IO:可以将分区映射到不同的物理磁盘上,来分散数据读写IO,提高整个系统的性能;
(4)改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
缺点:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。
表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间,这样查询数据时,不至于每次都扫描整张表。
配置步骤
- 创建多个表空间,这里以创建8个表空间为例,具体SQL如下:
CREATE TABLESPACE sde01 DATAFILE
'C:\APP\ADMINISTRATOR\ORADATA\ORCL\SDEDATAPART01.DBF' SIZE 100M