truncate table会不会释放相关索引

2024-08-21 13:18

本文主要是介绍truncate table会不会释放相关索引,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

转载:http://lanmh.iteye.com/blog/752372

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索引是一个好习惯,一是提高索引效率二是释放存贮区。

这篇关于truncate table会不会释放相关索引的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1093269

相关文章

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Redis的Hash类型及相关命令小结

《Redis的Hash类型及相关命令小结》edisHash是一种数据结构,用于存储字段和值的映射关系,本文就来介绍一下Redis的Hash类型及相关命令小结,具有一定的参考价值,感兴趣的可以了解一下... 目录HSETHGETHEXISTSHDELHKEYSHVALSHGETALLHMGETHLENHSET

Python中列表的高级索引技巧分享

《Python中列表的高级索引技巧分享》列表是Python中最常用的数据结构之一,它允许你存储多个元素,并且可以通过索引来访问这些元素,本文将带你深入了解Python列表的高级索引技巧,希望对... 目录1.基本索引2.切片3.负数索引切片4.步长5.多维列表6.列表解析7.切片赋值8.删除元素9.反转列表

python中的与时间相关的模块应用场景分析

《python中的与时间相关的模块应用场景分析》本文介绍了Python中与时间相关的几个重要模块:`time`、`datetime`、`calendar`、`timeit`、`pytz`和`dateu... 目录1. time 模块2. datetime 模块3. calendar 模块4. timeit

MySQL的索引失效的原因实例及解决方案

《MySQL的索引失效的原因实例及解决方案》这篇文章主要讨论了MySQL索引失效的常见原因及其解决方案,它涵盖了数据类型不匹配、隐式转换、函数或表达式、范围查询、LIKE查询、OR条件、全表扫描、索引... 目录1. 数据类型不匹配2. 隐式转换3. 函数或表达式4. 范围查询之后的列5. like 查询6

PostgreSQL如何查询表结构和索引信息

《PostgreSQL如何查询表结构和索引信息》文章介绍了在PostgreSQL中查询表结构和索引信息的几种方法,包括使用`d`元命令、系统数据字典查询以及使用可视化工具DBeaver... 目录前言使用\d元命令查看表字段信息和索引信息通过系统数据字典查询表结构通过系统数据字典查询索引信息查询所有的表名可

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

sqlite3 相关知识

WAL 模式 VS 回滚模式 特性WAL 模式回滚模式(Rollback Journal)定义使用写前日志来记录变更。使用回滚日志来记录事务的所有修改。特点更高的并发性和性能;支持多读者和单写者。支持安全的事务回滚,但并发性较低。性能写入性能更好,尤其是读多写少的场景。写操作会造成较大的性能开销,尤其是在事务开始时。写入流程数据首先写入 WAL 文件,然后才从 WAL 刷新到主数据库。数据在开始

两个月冲刺软考——访问位与修改位的题型(淘汰哪一页);内聚的类型;关于码制的知识点;地址映射的相关内容

1.访问位与修改位的题型(淘汰哪一页) 访问位:为1时表示在内存期间被访问过,为0时表示未被访问;修改位:为1时表示该页面自从被装入内存后被修改过,为0时表示未修改过。 置换页面时,最先置换访问位和修改位为00的,其次是01(没被访问但被修改过)的,之后是10(被访问了但没被修改过),最后是11。 2.内聚的类型 功能内聚:完成一个单一功能,各个部分协同工作,缺一不可。 顺序内聚:

log4j2相关配置说明以及${sys:catalina.home}应用

${sys:catalina.home} 等价于 System.getProperty("catalina.home") 就是Tomcat的根目录:  C:\apache-tomcat-7.0.77 <PatternLayout pattern="%d{yyyy-MM-dd HH:mm:ss} [%t] %-5p %c{1}:%L - %msg%n" /> 2017-08-10