- 浏览: 555706 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (340)
- Spring (4)
- Hibernate (2)
- Linux (34)
- Oracle (145)
- Eclipse (1)
- UML (1)
- HTML&&JAVASCRIPT (11)
- JAVA (33)
- 设计模式 (1)
- 版本控制 (1)
- wrap框架 (3)
- IBATIS (5)
- Ruby (1)
- DWR (1)
- MINA (11)
- JBPM (2)
- 缓存技术 (4)
- 网络 (3)
- 应用服务器 (1)
- GWT (5)
- 杂谈 (2)
- ICE (4)
- XML (2)
- ArcGis (2)
- Flex (8)
- junit单元测试 (1)
- SNMP (1)
- 存储 (1)
- office (1)
- MongoDB (0)
- Greenplum (3)
- 管理点滴 (1)
- C++ (6)
- 网络入门 (3)
- Tomcat (7)
- JMX (0)
- webservice (1)
- Oracle的10046事件 (1)
- Library cache内部机制详解 (1)
- expdp通过dblink来导入 (1)
最新评论
-
yuanliangding:
有没有关于mock的更多知识。
基于mock对象和JUnit框架简化Spring Web组件单元测试 -
saup007:
ssh端口不是22,怎么搞呢?
Greenplum 学习笔记 -
springmvc-freemarker:
java开源项目源码实例下载
Apache上全部JAVA开源项目简介 -
bobbell:
哇塞,你真厉害,整理的非常全面。我是一个java barcod ...
Greenplum 学习笔记 -
wsj55133245513324:
这不是bug,你将日志级别从debug提升到INFO 就好了 ...
Spring,smppapi,apache mina, ssl快速实现安全的smpp(5)
drop table dt_test_tab;
create table dt_test_tab (i number);
create index dt_test_idx on dt_test_tab(i);
insert into dt_test_tab values (1);
insert into dt_test_tab select i from dt_test_tab; / ... / 共17次得到131072条记录
commit;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 结果为4352k
truncate table dt_test_tab;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 结果为128k(就是建表建索引时缺省的initial extent,看来是缩回去了)
alter index dt_test_idx rebuild;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 结果还是128K. 想缩到0, 没门儿
再试试表,索引,delete/truncate reuse|drop storage 的结果:
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_TAB'; 表大小为:3328K (比索引还小,特例,因为表只一个字段)
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 索引大小为:4352K
删掉一半数据:
delete dt_test_tab where rownum < 65536; select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_TAB';
表大小未变:3328K 注意此时还没有commit;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 索引大小未变:4352K
commit;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_TAB'; 删掉一半记录后表大小未变:3328K
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 删掉一半记录后索引大小未变:4352K [删了记录,index 也未释放]
alter index dt_test_idx rebuild;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 删掉一半记录后重建索引,索引大小为:2200K [重建索引后,有所释放]
truncate table dt_test_tab reuse storage;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_TAB'; 重用存贮区的截表,表大小不变:3328K
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX'; 重用存贮区的截表,索引大小同样未变:2200K
truncate table dt_test_tab;
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_TAB';
select sum(bytes)/1024 from user_extents where segment_name='DT_TEST_IDX';不重用存贮区的截表,结果变了,缩回到了initial extents
结论]1、delete,表占用空间不变,这个众所周知,所谓的water-mark不变;表上索引占用空间也不会变;
2、truncate table tb_name reuse storage,表占用不变,表上索引占用也不会变;
3、truncate table tb_name,表与表上索引的空间占用均回到建立索引或表时的initial参数。
4、定期rebuild索引是一个好习惯,一是提高索引效率二是释放存贮区。
——小实验结束,立此存照。
发表评论
-
expdp通过dblink来导入
2011-12-14 15:01 1779create.sql: spo create.log rem ... -
Library cache内部机制详解
2011-12-14 14:55 885Library cache内部机制详解 http://www ... -
Oracle的10046事件
2011-12-14 14:53 2092Oracle的10046事件,可以跟踪应用程序所执行的SQL语 ... -
REDO LOG MEMBER STATUS 和 REDO LOG GROUP STATUS
2011-12-14 14:51 924V$LOG 中列出的是REDO LOG GROUP STA ... -
oracle的exp/imp使用方法学习(转)
2011-08-30 08:54 954exp/imp两个命令可以说是oracle中最常用的命令了 ... -
oracle几个awr报告
2011-08-09 14:25 890工作中,碰到的数据库慢的几个awr报告 -
Oracle Profile 使用详解
2011-06-21 14:41 966一、目的: Oracle系统中的profile可以用来对 ... -
ORA-27013
2011-04-13 14:25 1510很新的一个bug,看下你的 memory_target是不是& ... -
ACLE表连接方式分析及常见用法
2011-03-23 09:14 1109摘要: 针对在数据仓库 ... -
ORACLE 外部表应用
2011-03-09 14:58 1062SQL> create or replace direc ... -
How to convert a 32-bit database to 64-bit database on Linux
2011-02-18 14:09 1210How to convert a 32-bit databas ... -
expdp impdp 数据库导入导出命令详解
2011-02-16 09:10 1948一、创建逻辑目录,该命令不会在操作系统创建真正的目录,最 ... -
Oracle手工解/锁表
2011-01-25 14:15 2489手工锁表:lock table tbl_t1 in row ... -
oracle动态性能视图
2011-01-22 10:47 855Oracle动态性能视图个人整理 -
RBO规则介绍
2011-01-17 16:45 1059•无条件使用索引•使用内置的优先级别决定访问路径•比较难以 ... -
关于排序、sort_area_size、临时表空间
2011-01-13 15:30 1114简单陈述一下:针对每 ... -
创建索引ORACLE 需要做的工作
2011-01-13 14:53 1315一. 先来看一下创建索引要做哪些操作:1. 把inde ... -
表之间的连接
2011-01-13 10:42 791Join是一种试图将两个表结合在一起的谓词,一次只能连接2 ... -
重建索引的条件
2011-01-12 16:43 947如果索引存在碎片,那每个索引数据块上的索引数据就更少,会导致我 ... -
TKPROF使用学习
2011-01-10 17:38 716Tkprof工具可用来格式化sql trace产生的文件, ...
相关推荐
`DELETE` 会为每行删除操作创建日志条目,而 `TRUNCATE TABLE` 只记录页面的释放。 3. **标识列**:如果表中有标识列(自增列),`TRUNCATE TABLE` 会重置该列的种子值,即下一行的标识值会从初始值开始重新计算。若...
当你需要清空一张表,而又不想破坏表的定义或索引等元数据时,`TRUNCATE TABLE` 是理想的选择。与 `DROP TABLE` 相比,`DROP TABLE` 会完全删除表及其结构,这意味着如果你想再次使用该表,需要重新创建表结构和填充...
首先,TRUNCATE TABLE 是一种快速删除表中所有数据的方式,它并不记录每行的删除操作,而是直接释放存储数据的页面。这意味着,当使用 TRUNCATE 时,事务日志空间的使用量非常小,这对于大型表尤其有利。相比之下,...
- 可以重用存储空间,即如果执行`TRUNCATE TABLE table_name REUSE STORAGE`,则可以释放未使用的空间并允许再次使用。 2. **`DELETE`**: - **定义**:`DELETE`是一种DML(数据操纵语言)命令,用于删除表中的...
相反,它会释放构成表的数据页,这是一个批量的、不可回滚的操作。由于不涉及行级别的删除,Truncate Table通常比DELETE更快,因为它不需要为每一行记录事务日志条目。 在SQL Server中,Truncate Table的操作是通过...
4. 即使数据或索引文件损坏,只要表定义文件合法,仍可使用`TRUNCATE TABLE`将表恢复为空。 在Cedar中,`TRUNCATE TABLE`语法支持一次性清空多张表,成功执行后返回“0 rows affected”,失败则返回错误代码。然而...
此外,如果表包含临时或全局索引,`TRUNCATE TABLE` 可能会失败,而 `DELETE FROM` 则没有这个问题。 6. 空间回收 `TRUNCATE TABLE` 立即释放表空间,而 `DELETE FROM` 在事务提交后才会回收。这使得 `TRUNCATE` ...
- **空间完全释放**:`drop` 操作会释放表所占用的所有空间。 - **速度较快**:与 `truncate` 类似,`drop` 的执行速度也很快。 - **安全性**:使用 `drop` 需要格外小心,尤其是在没有备份的情况下使用。 **3. ...
本文导读:删除表中的数据的方法有delete,truncate, 其中TRUNCATE TABLE用于删除表中的所有行,而不记录单个行删除操作。TRUNCATE TABLE 与没有 WHERE 子句的 DELETE 语句类似;但是,TRUNCATE TABLE 速度更快,使用...
这是因为对于分区表的操作(如truncate、move或shrink)通常只会影响本地索引的一个分区,而不会影响全局索引的所有分区。 - **位图索引**:位图索引只能是本地分区索引。 ##### 2. 创建示例 以创建有前缀的本地...
- **性能影响**:在使用较大 InnoDB 缓存池的系统中,由于 TRUNCATE TABLE 操作会移除 InnoDB 表的自适应哈希索引记录,可能会导致系统性能出现短暂下降。 #### 日志及复制影响 TRUNCATE TABLE 作为一种特殊的 DDL...
当DBA或其他用户具有足够的权限时,可能会因为输入错误等原因执行`DROP TABLE`或`TRUNCATE TABLE`命令,导致重要的数据表被意外删除或清空。例如,用户原本打算删除名为`A`的表(`DROP TABLE A CASCADE CONSTRAINTS;`...
`DELETE` 会在日志中为每一行删除操作创建记录,这可能导致事务日志迅速膨胀,而 `TRUNCATE TABLE` 只记录页面的释放,大大减少了日志使用。 其次,`TRUNCATE TABLE` 在锁的使用上也更为高效。`DELETE` 通常会锁定...
其语法结构为`TRUNCATE [TABLE] table_name`。使用`TRUNCATE`删除数据时,不会产生回滚段,因此删除速度非常快。例如,`TRUNCATE TABLE users`将彻底清空`users`表。`TRUNCATE`语句有两种形式:一种是默认的,即删除...
在MySQL数据库管理中,误操作是一个常见的问题,尤其是像`TRUNCATE TABLE`这样的命令,它会立即删除表中的所有数据且无法通过`ROLLBACK`撤销。本案例将详细讲解如何在MySQL中,特别是在Percona Server 5.6.16环境下...
与`DELETE`不同的是,`TRUNCATE`不会逐一删除数据行,而是重置数据字典中的元数据信息,使表返回到初始状态。这一操作虽然高效,但同时也带来了数据恢复的风险。本文将详细介绍在没有备份的情况下恢复`TRUNCATE`后...
这条命令会将"Article"表中的所有行删除,但不会影响表的结构或任何关联的索引和约束。然而,与真正的TRUNCATE语句相比,使用DELETE语句有其局限性。特别是当表中数据量非常大时,DELETE操作可能会相当耗时,并且会...