首页 > 数据库 >创建Oracle索引,过犹不及

创建Oracle索引,过犹不及

时间:2023-09-18 10:08:51浏览次数:48  
标签:p2 类别 t4 t3 t1 索引 过犹不及 Oracle


我有几个oracle存储过程,其中有两个涉及到递归运算,相对来说非常费时间的。这几个oracle程序我给他们编号为 p1,p2,p3,p4,p5  其中p2,p5有较复杂的递归运算,涉及到的表格主要有4个,分别为t1,t2,t3,t4。另外还有一些基础表。

数据首先在基础表中,t1,t2,t3,t4中没有数据。

t1,t2,t3,t4的数据结构基本一样,
p1是将基础库中的数据按不同的类别(六种类别)根据规则进行计算,将结果存到t1中。
p2是将t1中的数据按不同类别分别进行递归运算。将结果存储到t2中
p3是将t1中不同类别的唯一号相同(解释:每个类别的数据都有一个唯一号与其它的类别的相对应的,即类别1中有唯一号是10020的,那么类别2、类别3、类别4、类别5、类别6中也有相应的唯一号是10020的一条记录)数据进行汇总。结果存入t3中。t3中的数据就不会分类别了。因为是汇总了的。
p4将t2中的数据进行汇总,算法与p3相近,只不过p4汇总的是已经进行过递归运算的数据。最后结果存入t4,这个t4就是最终的结果。
p5将t3总的已经汇总了的数据进行递归运算。算法与p2相近。但是此时只进行一次递归。而p2是对各个类别分别进行递归。最后结果与p4运算的结果理论上是一样的。也就是从基础数据可以通过两个路径求出最终的结果(t4)。

首先我是在四个表中分别建了3-4个索引:在唯一号(id)和p_id上(解释:p_id 与唯一号(id)进行内部关联形成了比较复杂的树状结构)各建一个索引,另外有两个会用来作条件限定的字段上也分别建了索引。

此时对五种运算进行测试。结果:

程序执行时间表

 

 max(秒)

 min(秒)

 avg(秒)

 p1

 67

 19

 20

 p2

 101

 67

 70

 p3

 6

 2.5

 3

 p4

 6

 2.5

 3.5

 p5

 19

 8

 10

后来我将那两个用作条件限定的字段上面的索引删了,只留下id和p_id上面的索引。又进行了测试。结果:

程序执行时间表

 

 max(秒)

 min(秒)

 avg(秒)

 p1

16

 12

 14

 p2

66

54

58

 p3

1.6

 1.3

 1.4

 p4

1.5

1.3

1.4

 p5

10.8

8.6

9

可见除了p5性能提升只有10%外。其它的提升都达到了20%以上。

 我们建立的索引在查询的时候性能会提高,但是在插入或者修改删除数据的时候性能会降低。也就是索引多了不一定性能就能提升。所谓过犹不及。所以我们在建立索引的时候要根据具体的需要和具体的情况酌情在相应的字段或字段组合上建立索引,以保证最高的性能回报。

标签:p2,类别,t4,t3,t1,索引,过犹不及,Oracle
From: https://blog.51cto.com/u_8215601/7507376

相关文章

  • 最近遇到了几个oracle权限的几个小问题
     最近做项目的时候遇到了几个小问题,记录一下:1、在工具中可以直接drop掉用户,但是不能执行dropuser删用户。原来如果想要能显示执行语句删用户,必须付给用户dropuser权限才可以。2、很多表需要建立公共的同义词,其他用户访问此表时通过同义词才可以保证不出错,另外还要为这些用户赋......
  • MongoDB 中使用 explain 分析创建的索引是否合理
    MongoDB中如何使用explain分析查询计划前言查询计划explainexplain1、queryPlanner2、executionStats3、allPlansExecutionindexfilterStage参数说明参考MongoDB中如何使用explain分析查询计划前言创建完索引,如何分析索引的执行情况呢,MongoDB中同......
  • MySQL 索引、事务与存储引擎
     一、索引1.索引的概念●索引是一个排序的列表,在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址(类似于C语言的链表通过指针指向数据记录的内存地址)。●使用索引后可以不用扫描全表来定位某行的数据,而是先通过索引表找到该行数据对应的物理地址然后访问相应的数据,......
  • Oracle不能in超过1000条数据吗
    在Oracle数据库中,对于IN子句的值列表有一个默认限制,该限制取决于数据库的版本。在早期版本的Oracle中,默认情况下,对于IN子句的值列表限制为1000个值。然而,从Oracle12c开始,引入了LISTAGG函数和SYS.ODCIVARCHAR2LIST类型,可以用于处理超过1000个值的IN子句。您可......
  • Linux上Oracle 11g安装步骤图解
    Oracle11g安装准备工作目录Oracle11g安装准备工作Oracle11g下载地址:Oracle11g 联机文档:Oracle11gR2数据库安装硬件配置要求:Linux平台需要的软件包支持:创建Oracle用户修改内核参数修改用户限制修改用户验证选项修改用户配置文件安装目录配置修改用户bashsh......
  • MySQL——索引底层
    索引索引是存储引擎用于快速获取数据的一种数据结构,目的是减少磁盘I/O次数,提高数据库性能。索引是在存储引擎中实现的,因此每种存储引擎的索引不一定完全相同。频繁作为查询条件(不包括唯一性太差的字段,如男女)的字段应该创建索引。代价1、额外的磁盘占用2、对表进行DML(增删改)......
  • ES操作索引
    packagecn.itcast.hotel;importcn.itcast.hotel.constant.EsConstant;importorg.elasticsearch.action.admin.indices.delete.DeleteIndexRequest;importorg.elasticsearch.action.support.master.AcknowledgedResponse;importorg.elasticsearch.client.RequestOpti......
  • Oracle基础(3)--审计
    数据库的安全性和审计数据库安全一个安全的系统可确保其中包含的数据的机密性。安全性主要有:限制对数据和服务的访问、验证用户、监控可疑活动。监视和审计Mandatoryauditing--强制审计Standarddatabaseauditing–标准数据库审Value-basedauditing–基于......
  • 深入了解Elasticsearch搜索引擎篇:倒排索引、架构设计与优化策略
    什么是倒排索引?有什么好处?倒排索引是一种用于快速检索的数据结构,常用于搜索引擎和数据库中。与传统的正排索引不同,倒排索引是根据关键词来建立索引,而不是根据文档ID。倒排索引的建立过程如下:首先,将每个文档拆分成一系列的关键词或词项,然后建立一个词项到文档的映射。对每个关键词......
  • ORACLE-【模糊查询】oracle中带有特殊符号的模糊查询
    首先讲一下Oracle模糊查询,模糊查询使用的是like关键字Oracle模糊查询可使用的通配符,Oralce中SQL语句提供了四种匹配模式:%零或者多个字符_单一任何字符(下划线)\特殊字符[]在某一范围内的字符,如[0-9]或者[aeth][^]不在某范围内的字符,如[^0-9]或者[^aeth]后两......