技术标签: oracle 存储 数据库 delete table
Oracle表段中的高水位线HWM
在Oracle数据的存储中,可以把存储空间想象为一个水库,数据想象为水库中的水。水库中的水的位置有一条线叫做水位线,在Oracle中,这条线被称为高水位线(High-warter mark, HWM)。在数据库表刚建立的时候,由于没有任何数据,所以这个时候水位线是空的,也就是说HWM为最低值。当插入了数据以后,高水位线就会上涨,但是这里也有一个特性,就是如果你采用delete语句删除数据的话,数据虽然被删除了,但是高水位线却没有降低,还是你刚才删除数据以前那么高的水位。也就是说,这条高水位线在日常的增删操作中只会上涨,不会下跌。
下面我们来谈一下Oracle中Select语句的特性。Select语句会对表中的数据进行一次扫描,但是究竟扫描多少数据存储块呢,这个并不是说数据库中有多少数据,Oracle就扫描这么大的数据块,而是Oracle会扫描高水位线以下的数据块。现在来想象一下,如果刚才是一张刚刚建立的空表,你进行了一次Select操作,那么由于高水位线HWM在最低的0位置上,所以没有数据块需要被扫描,扫描时间会极短。而如果这个时候你首先插入了一千万条数据,然后再用delete语句删除这一千万条数据。由于插入了一千万条数据,所以这个时候的高水位线就在一千万条数据这里。后来删除这一千万条数据的时候,由于delete语句不影响高水位线,所以高水位线依然在一千万条数据这里。这个时候再一次用select语句进行扫描,虽然这个时候表中没有数据,但是由于扫描是按照高水位线来的,所以需要把一千万条数据的存储空间都要扫描一次,也就是说这次扫描所需要的时间和扫描一千万条数据所需要的时间是一样多的。所以有时候有人总是经常说,怎么我的表中没有几条数据,但是还是这么慢呢,这个时候其实奥秘就是这里的高水位线了。
那有没有办法让高水位线下降呢,其实有一种比较简单的方法,那就是采用TRUNCATE语句进行删除数据。采用TRUNCATE语句删除一个表的数据的时候,类似于重新建立了表,不仅把数据都删除了,还把HWM给清空恢复为0。所以如果需要把表清空,在有可能利用TRUNCATE语句来删除数据的时候就利用TRUNCATE语句来删除表,特别是那种数据量有可能很大的临时存储表。
修正ORACLE表的高水位线
在ORACLE中,执行对表的删除操作不会降低该表的高水位线。而全表扫描将始终读取一个段(extent)中所有低于高水位线标记的块。如果在执行删除操作后不降低高水位线标记,则将导致查询语句的性能低下。下面的方法都可以降低高水位线标记。
1.执行表重建指令 alter table table_name move;
(在线转移表空间ALTER TABLE 。。。 MOVE TABLESPACE 。。。
ALTER TABLE 。。。 MOVE 后面不跟参数也行,
不跟参数表还是在原来的表空间,move后记住重建索引
如果以后还要继续向这个表增加数据,没有必要move,
只是释放出来的空间,只能这个表用,其他的表或者segment无法使用该空间
)
2.执行alter table table_name shrink space; 注意,此命令为Oracle 10g新增功能,再执行该指令之前必须允许行移动 alter table table_name enable row movement;
3.复制要保留的数据到临时表t,drop原表,然后rename临时表t为原表
4.emp/imp
5.alter table table_name deallocate unused
6.尽量truncate 吧
所谓诅咒就是一种通过很平常的方法传播的一种渐渐随着时间会吞噬整个身体的微妙变化,其会通过蝴蝶效应的方法,利用多米诺骨牌效应,使人体加速其细胞的衰老和死亡。1.【诅咒术的原理】我也问个问题 诅咒为什么会灵验?就凭一句话?一张照片?还是一根头发或者一个人偶?没有真正学过诅咒术的人大多想不通 这不是个复杂的问题 现在我只说对于一个生物来讲的那种诅咒术 比如让其患上疾病之类所有此类诅咒都必须有一个指..._诅咒术
前言:昨儿晚上三点多睡不着,不知道胡思乱想了些啥,好不容易睡着了又做了些稀奇古怪的梦。考研还是继续,真难。这一篇博客记录一下求斐波那契数列第n项值得几种方法,用到了递归和迭代的方法,所以首先我们来区分一下递归和迭代,再来记录几种方法。递归和迭代联系递归与迭代都是循环的一种。区别1、程序结构不同递归是重复调用函数自身的循环。迭代是函数内部代码的循环。注意:迭代和普通循环的区别:迭代时,循环代码中参与计算的变量也是要返回的结果,当前保存的结果作为下一次循环计算的初始值。2、算法结束方式_递归法求斐波那契数列第n项
#include unsigned int sleep(unsigned int seconds);//睡眠秒返回值:成功返回0,或者返回剩余的要睡眠的秒数(被signal中断后).int usleep(useconds_t usec);//睡眠微秒返回值:成功返回0,出错返回-1.useconds_t == unsigned int秒的进制:1秒 (s)= 1
认识ScalaScala 是一门多范式(multi-paradigm)的编程语言,设计初衷是要集成面向对象编程和函数式编程的各种特性。Scala 运行在Java虚拟机上,并兼容现有的Java程序。Scala 源代码被编译成Java字节码,所以它可以运行于JVM之上,并可以调用现有的Java类库。Scala特性面向对象特性Scala是一种纯面向对象的语言,每个值都是对象。对象的数据类型以..._scala args
本文作为shell脚本基础系列的最后一篇文章,这里做一个练习。如何利用for循环去执行命令。1. 用for循环去执行不同命令2.for循环加上if语句打印文件把脚本文件放到/etc下,然后执行看看效果,然后把脚本中 -f 改成 -d再试试。结束语:Linux命令基础和shell脚本基础就先到这里,shell脚本需要用实际的工作中的任务去练习编写,才更有提高和更有趣。_shell for结束循环
编译zabbix报错make[3]: Leaving directory `/home/sysadmin/zabbix/zabbix-1.8/src/libs/zbxjson'make[3]: Entering directory `/home/sysadmin/zabbix/z
带货直播源码,应用获取通知栏权限相关的代码工具类 NotificationsUtils:package com.xxx.ua.utils;import android.annotation.SuppressLint;import android.app.AppOpsManager;import android.content.Context;import android.content.pm.ApplicationInfo;import java.lang.reflect.Field;i_java获取通知权限
本文主要基本解读关于Runtime相关的知识, 主要针对Runtime源码, OC中的类和对象进行基本的解释, 这个也是基于本人对Runtime源码分析和看了官方文档后的一点体会.
混淆矩阵TP(真阳)FP(假阳)FN(假阴)TN(真阴)ROC曲线在理解ROC曲线之前,我们需要知道FPR(False Positive Rate)和TPR(True Positive Rate):FPR=FP/(FP+TN),即预测为正样本(实际为负样本)占所有负样本的比例。TPR=TP/(TP+FN),即预测为正样本(实际为正样本)占所有正样本的比例。roc曲线:就是以FPR为横坐标,TPR为纵坐标,通过设定不同的阈值而绘制出许多坐标点,用这些坐标点拟合出一条曲线,_多分类 roc曲线绘制
首先安装speedtest-cli:$ sudo apt install speedtest-cli安装完成之后输入$ speedtest-cli即可看到测速了,效果如下:
问题复现解决方法this.$refs.xswtlxCascader.$refs.panel.checkedValue=[];//清空选中值 this.$refs.xswtlxCascader.$refs.panel.clearCheckedNodes();//清空级联选择器选中状态 this.$refs.xswtlxCascader.$refs.panel.activePath=[];//清除高亮..._element-ui cascader 赋值时子集如何显示高亮
废话不说,上代码!nav 1nav 2nav 3重点:1,selectedkeys要设置成$route.path地址2,a-menu-item 的key设置成要去的地址刷新页面,成功!补充知识:vue根据路由刷新页面(切换菜单刷新页面)刷新页面有两种方法:一种是用:localtion.reload();但是这种是重新加载页面,造成一闪一闪的效果。一种是用provide+inject,provide..._antdvue 菜单变化时重新加载路由