Oracle Spatial分区应用研究之七:同等分区粒度下全局索引优于分区索引的原因分析
1、实验结论
- 同等分区粒度下,使用分区空间索引进行空间查询,比使用全局空间索引进行查询,对数据字典表的访问次数更多。假设分区数为X,则大概多3X次访问。具体说明见6实验结论。
2、实验目的
在之前的测试中,发现这样一个现象:同等分区粒度下,分区空间索引效率不如全局空间索引。可是,深层次的原因是什么呢?
3、实验方法
分别以按县分区、按省分区组织数据,按县分区表共有2531个分区,按省分区表共有43个分区。数据内容为2531个区县,共46982394条要素。分别在两个分区表上创建本地空间索引。
开启10046事件,跟踪SDO_FILTER操作。使用tkpof分析trc文件中耗时最多的SQL,对根据绑定变量的值分析不同SQL(主要是对数据字典的递归查询)查询的数据内容。比较在使用分区索引时所查询的数据字典内容,与在使用全局索引时查询的数据字典内容。
4、实验结果
在使用分区空间索引时,按县分区与按省分区对数据字典的访问次数及返回记录数如下:
- Seg$
查询内容包括LOB INDEX PARTITION、LOB PARTITION、TABLE PARTITION、少量sys和mdsys用户下的表、其它表。
以按县分区表为例,包括:
INDEX PARTITION : 2531 * 3 = 7593 (此处不包括分区空间索引,仅包括LOB INDEX PARTITION)
LOB PARTITION : 2531 * 3 = 7593
TABLE PARTITION:2531
- Obj$
查询内容包括LOB PARTITION、SPATIAL INDEX PARTITION、相关的TABLE PARTITION
以按省分区表分为,包括:
LOB PARTITION : 43 * 3 =129
INDEX PARTITION : 43 (此处包括SPATIAL INDEX PARTITION ,不包括LOB INDEX PARTITION)
TABLE PARTITION : (仅包括与查询范围相关的分区,可忽略不计)
- Lobfrag$
查询内容与全局空间索引下一致。
- Indpart$
查询内容包括INDEX PARTITION,包括LOB INDEX PARTITON 以及 SPATIAL INDEX PARTITION。
以按省分区表为例,包括:
INDEX PARTITION : 43 * 4 =172
- Obj$(2)
查询内容包括LOB PARTITION、SPATIAL INDEX PARTITION,少量其它表。
以按省分区表为例,包括:
LOB PARTITION : 43 * 3 =129
INDEX PARTITION : 43 (此处包括SPATIAL INDEX PARTITION ,不包括LOB INDEX PARTITION)
其它:82个sys和mdsys用户下的表、以及test用户下的其他一些表,可忽略。
- Tabpart$
查询内容全局空间索引下一致。
5、实验结论
结合3实验结果中的说明,假设分区数以X表示,lob column个数以Y表示,在使用分区空间索引进行查询时,不同字典表的访问次数见下表:
数据字典表 |
访问次数 |
Seg$ |
(1+2Y)*X |
Lobfrag$ |
XY |
Obj$ |
(1+Y)*X |
Indpart$ |
(1+Y)*X |
Obj$(2) |
(1+Y)*X |
Tabpart$ |
X |
若已经获知对各数据字典表的平均访问时间,甚至可以估算查询耗时。在每例中seg$ 、lobfrag$ 、obj$ 、indpart$、obj$(2) 、tabpart$,各数据字典表的平均访问时间约为100us、240us、50us、150us、180us、120us。因此可估算时间为:
Elapsed all= 100*(1+2Y)*X+240XY+50*(1+Y)*X+150*(1+Y)X+180*(1+Y)*X+120X
=X(820Y+600)
与全局索引X(820Y+220)相比,查询数据字典多耗时380X(单位是us)。
Oracle Spatial分区应用研究之七:同等分区粒度下全局索引优于分区索引的原因分析的更多相关文章
- Oracle Spatial分区应用研究之三:县市省不同分区粒度的效率比较
在<Oracle Spatial分区应用研究之一:分区与分表查询性能对比>中已经说明:按县分区+全局空间索引效率要优于按县分区+本地空间索引,因此在该实验报告中,将不再考虑按县分区+本地空 ...
- Oracle Spatial分区应用研究之八:不同分区粒度在1.5亿要素量级下的查询性能
以土地调查地类图斑层作为测试数据,共计约1.5亿条要素.随机生成90次各比例尺的查询范围,在ORACLE 11gr2数据库中进行空间查询,记录查询耗时.最后计算平均值和第90百分位数,结果如下图所示: ...
- Oracle Spatial分区应用研究之五:不同分区粒度+本地空间索引效率对比
1.实验目的 若使用本地空间索引,不同分区粒度将产生不同索引组织,其索引分区个数.大小.R-TREE树结构均不相同.那么,在什么分区粒度下的本地空间索引效率较高呢? 2实验数据 实验数据为全国2531 ...
- Oracle Spatial分区应用研究之二:按县分区与按省分区对比测试报告
1.实验目的 在上一轮的实验中,oracle 11g r2版本下,在87县市实验数据的基础上,比较了分表与分区的效率,得出了分区+全局索引效率较高的结论(见上一篇博客).不过我们尚未比较过不同的分区粒 ...
- Oracle Spatial分区应用研究之六:全局空间索引下按县分区与按省分区效率差异原因分析
1.实验结论 全局空间索引下,不同分区粒度之所有效率会有不同,差异并不在于SDO_FILTER操作本身,而在于对于数据字典表的访问次数上: 分区越多.表上的lob column越多,对数据字典表的访问 ...
- Oracle 12C 新特性之表分区带 异步全局索引异步维护(一次add、truncate、drop、spilt、merge多个分区)
实验准备:-- 创建实验表CREATE TABLE p_andy(ID number(10), NAME varchar2(40))PARTITION BY RANGE (id)(PARTITION ...
- oracle 11g 分区表创建(自动按年、月、日分区)
前言:工作中有一张表一年会增长100多万的数据,量虽然不大,可是表字段多,所以一年下来也会达到 1G,而且只增不改,故考虑使用分区表来提高查询性能,提高维护性. oracle 11g 支持自动分区,不 ...
- Oracle分区表删除分区引发错误ORA-01502: 索引或这类索引的分区处于不可用状态
(一)问题: 最近在做Oracle数据清理,在对分区表进行数据清理时,采用的方法是drop partition,删除的过程中,没有遇到任何问题,大概过了10分钟,开发人员反馈部分分区表上的业务失败.具 ...
- Oracle同义词、索引、分区
同义词:是现有对象的一个别名 简化SQL语句 隐藏对象的名称和所有者 提供对对象的公共访问 同义词共有两种类型 私有同义词只能在其模式内访问,且不能与当前模式的对象同名 公有同义词可被所有的数据库用户 ...
随机推荐
- Cyclical Quest CodeForces - 235C (后缀自动机)
Cyclical Quest \[ Time Limit: 3000 ms\quad Memory Limit: 524288 kB \] 题意 给出一个字符串为 \(s\) 串,接下来 \(T\) ...
- random库
伪随机数的原因: random库中函数主要用于产生各种分布的伪随机数序列.random库中的随机函数是按照一定算法模拟产生的,其概率是确定的.可见的,所以被称为伪随机数.而真正意义上的随机数是按照实验 ...
- Xamarin.Android开发中遇到的问题
开发 1.Resource.Id未包含xxx的定义 打开了一个OK的Id,是位于\obj\Debug\90\designtime\Resource.designer.cs ,打开文件搜索xxx,果然没 ...
- ent 基本使用十四 edge
edge 在ent 中属于比较核心,同时也是功能最强大的,ent 提供了比较强大的关系模型 快速使用 参考图 以上包含了两个通过边定义的关系 pets/owner: user package sc ...
- ES6 String和Number扩展
一.String 扩展 ①传统上,JavaScript 只有indexOf方法,可以用来确定一个字符串是否包含在另一个字符串中.ES6 又提供了三种新方法. includes():返回布尔值,表示是否 ...
- Python 11 提取括号中间的内容
原文:https://blog.csdn.net/your_answer/article/details/80456550 import re string = 'abe(ac)ad)' p1 = r ...
- uni app 零基础小白到项目实战2
<template> <scroll-view v-for="(card, index) in list" :key="index"> ...
- 读RAM时的时序风险
读RAM时的时序有两个风险:1.数据已经存储好,读所需的时间.2.数据同时更新,读所需的时间节点.对于前者,只要延时足够节拍就行.对于后者,还必须要考虑数据建立的时间,同样延时的准备可能会因为数据尚未 ...
- H5中对history栈的操作
今天研究一下H5中history操作的相关知识,首先梳理一下基本内容: 一.在history中的跳转 使用 back(), forward()和 go() 方法来完成在用户历史记录中向后和向前的跳转. ...
- DenseASPP论文总结
论文地址:http://openaccess.thecvf.com/content_cvpr_2018/papers/Yang_DenseASPP_for_Semantic_CVPR_2018_pap ...