Oracle Spatial分区应用研究之四:不同分区粒度+全局空间索引效率对比

1、实验目的

在实验之前先回答这样一个问题——对同一份数据使用不同的分区粒度,但均创建全局空间索引,问:它们的全局空间索引一致吗?

怎样算是一致的呢?R-TREE的树结构一致算一致吗?空间索引条目数及大小一致算一致吗?严格的一致,当然是指索引条目数、索引大小、R-TREE树结构完全一致。但经过分析发现,它们的索引条目数、R-TREE树结构是完全一致的,但索引大小有微小的差别。但我们仍然认为它们的全局索引是一致的,这是因为,R-TREE树结构才是决定空间索引是否一致的关键。

基于上述前提条件,思考一个问题:在执行空间查询时,若执行计划的第一步是扫描全局空间索引,这种情况下使用不同分区粒度的表,查询效率是相同的吗?实验之前,我会认为是相同的。因为尽管分区粒度不一样,但执行逻辑完全一致——根据全局空间索引查找匹配的ROWID,根据ROWID返回记录。而ROWID是无差别的,即相同磁盘设备下访问不同ROWID损耗是一样的。但真实情况呢?

2实验数据

实验数据为全国2531个区县,要素总数为46982394。分别以按县、市、省、区域分区,以及不分区来进行组织。在所有表上均创建全局空间索引。先介绍按省分区、按区域分区相关信息。

按省分区,各分区记录数及blocks:

按区域分区,各分区记录数及blocks:

3实验方法

在1:500、1:2000、1:10000、1:25000、1:50000、1:100000比例尺下,随机从全国范围内选择3个样本范围,作为空间查询时的查询范围。将6*3个样本范围分别与3个实验主体进行空间查询运算,记录每次查询的耗时。

算法统一使用最适合全局空间索引的算法:part_query3。

4实验结果

实验结果如下表:

求每种比例尺3个样本的平均值:

绘制不同分区粒度在不同比例尺下响应时间的折线图。

5实验结论

  1. 尽管全局空间索引一致,但不同的数据组织方式影响查询效率。从图中可知,过于分散数据(按县分区)将导致性能下降;适度分散对性能影响较小甚至没有影响。
  2. 在使用全局索引的情况下,未分区效率最高(命中18次中的9次),按区域分区次之(18次命中6次),按省分区又次之(18次命中3次)。
  3. 按省分区、按区域分区、不分区在全局空间索引下的查询效率相差不大,是否产用分区,产用何种分区,应结合业务场景选择合适的组织方式。

(未完待续……)

原文地址:https://www.cnblogs.com/6yuhang/p/8266975.html

时间: 2024-10-04 19:08:53

Oracle Spatial分区应用研究之四:不同分区粒度+全局空间索引效率对比的相关文章

Oracle Spatial分区应用研究之三:县市省不同分区粒度的效率比较

在<Oracle Spatial分区应用研究之一:分区与分表查询性能对比>中已经说明:按县分区+全局空间索引效率要优于按县分区+本地空间索引,因此在该实验报告中,将不再考虑按县分区+本地空间索引的组合,本次实验的实验主体为如下3个: 按县分区+全局空间索引 按市分区+本地空间索引 按省分区+本地空间索引 第一组实验: 第二组实验: 结论: 按省分区+本地空间索引效率最高 Part_query算法最优 (未完待续--) 原文地址:https://www.cnblogs.com/6yuhang/p

oracle执行代码段以及表分区

1.这是在oracle的sql窗口下执行一个代码块 declarev_char1 varchar2(100);v_char2 varchar2(100);v_c char(1); --中间变量beginv_char1 :='&no'; --替换变换dbms_output.put_line('输入的数据为:'||v_char1);for i in reverse 1..length(v_char1)loopv_c := substr(v_char1,i,1);v_char2 := v_char2

oracle range分区表已经有了MAXVALUE 分区,如何添加分区?要不能删除MAXVALUE分区里的数据,不影响在线应用。

来做个实验说明该问题:1.创建个分区表SQL> create table p_range_test 2 (id number,name varchar2(100)) 3 partition by range(id)( 4 partition t_p1 values less than (10), 5 partition t_p2 values less than (20), 6 partition t_p3 values less than (30) 7 );Table created. 2.查

Oracle本地网络分表模拟分区裁剪

来自讨论贴 http://www.itpub.net/thread-1877111-1-1.html 准备数据表 2014-07-20 01:38:10>create table tb_1 as select * from dba_objects where rownum<100; 表已创建. 2014-07-20 01:38:19>create table tb_2 as select * from dba_objects where rownum<100; 表已创建. 2014

如何在Oracle 12C中添加多个分区 (Doc ID 1482456.1)

How to Add Multiple Partitions in Oracle 12C (Doc ID 1482456.1) APPLIES TO: Oracle Database - Enterprise Edition - Version 12.1.0.1 and laterOracle Database Exadata Cloud Machine - Version N/A and laterOracle Cloud Infrastructure - Database Service -

oracle大数据量。表分区提示查询效率

现在业务有一张usertrack 日志记录表.每天会产生30万条数据.数据量大查询效率会非常慢 所以我考虑通过表分区来提示效率  逻辑上是一张表.但是分区后会按照分区条件将数据分在不同的物理文件 优点: 1)   改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度. 2)   增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用: 3)   维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可: 4)   均衡I/O:可以把不同的分区映射到磁盘以平衡I

企业生产环境不同业务,系统分区建议(自定义分区布局)

Linux系统对分区的要求 1.最少要有/分区 2.swap(交换分区)的作用:虚拟化内存,swap区分的大小=105*物理内存容量(mem<8G) 3.建议设置独立的/boot分区 #linux引导分区,存放系统引导文件,如果linux内核等,所有文件大小一般只有十几M,因此,该分区设置100-200M 企业生产环境不同业务linux系统分区建议(自定义分区布局) 1.常规分区方案 /分区:剩余硬盘大小 swap分区:内存的1.5倍(mem>8G) /boot分区:100M 2.DB及存储

[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到)

原文:[推荐]ORACLE PL/SQL编程之四:把游标说透(不怕做不到,只怕想不到) [推荐]ORACLE PL/SQL编程之四: 把游标说透(不怕做不到,只怕想不到) 继上两篇:ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之六:把过程与函数说透(穷追猛打,把根儿都拔起!) 得到了大家的强力支持,感谢.接下来再下猛药,介绍下一篇,大家一定要支持与推荐呀~!我也才有动力写后面的. 本篇主要内容如下: 4.1 游标概念 4.1.1 处理显式游标 4.1.2 处理

u-boot中分区和内核MTD分区关系

一.u-boot中环境变量与uImage中MTD的分区关系 分区只是内核的概念,就是说A-B地址放内核,C-D地址放文件系统,(也就是规定哪个地址区间放内核或者文件系统)等等. 一般我们只需要分3-4个区,第一个为boot区,一个为boot参数区(传递给内核的参数),一个为内核区,一个为文件系统区.(但是有的内核就会有很多分区,比如内核参数会有两个,还有会Logo的地址) 而对于bootloader中只要能将内核下载到A~B区的A地址开始处就可以,C~D区的C起始地址下载文件系统…….这些起始地