Oracle 表删除大量数据后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了,查询起来很慢。解决的方法是把该表所占用的表空间缩小,或者说释放表空间。
alter table XXXX move; 这样处理后就释放了表空间了。但是释放表空间后,表的行号rowid会发生变化,而基于rowid的索引则会变成无效。因此该操作后必须重建索引。否则会 提示“ORA-01502: 索引'SMP.ITEMLOG_MID_IDX'或这类索引的分区处于不可用状态” 而重建索引的方法当然可以先drop掉再create ,但是这样太麻烦了,用alter index XXX rebuild 这样最快了,不会改变原来的索引结构。
作者“迈小步、不停步!”
http://www.2cto.com/database/201109/103257.html
认识Oracle的回滚操作后对查询的影响
http://xpws2006.blog.163.com/blog/static/95438577200909111670/
回滚并不是让磁盘恢复到以前的样子。前面的INSERT 操作将一些块增加到表的高水位线(high-water mark,HWM)之下,这些块没有因为回滚而消失,它们还在那里,而且已经格式化,只不过现在为空。全表扫描必须读取这些块,看看其中是否包含行。这说明,回滚只是一个“将数据库还原“的逻辑操作。数据库并非真的还原成原来的样子,只是逻辑上相同而已。
分享到:
相关推荐
Oracle 表删除大量数据后,即使表中只有几行记录,但用select count(*) from table 来查询发觉都不会马上出来,原因是该表的空间大了
Oracle 表删除大量数据后查询变慢问题分析 在 Oracle 数据库中,如果删除了大量数据(千万级别),可能会出现查询变慢的问题。下面我们将分析这个问题的原因,并提供解决方案。 问题的原因主要有两个方面: 1. 表...
* 删除速度:在删除大量数据时,删除速度可能会变慢,特别是在亿级数据库中。 四、优化删除速度 如果您需要删除大量数据,您可以尝试以下方法来优化删除速度: * 使用并行删除:可以使用 Oracle 的并行删除功能...
#### 一、Oracle 表的基本规则与数据类型 **1. 表名规则:** - **必须以字母开头**:表名的第一个字符必须是字母(A-Z 或 a-z)。 - **长度限制**:表名的最大长度不得超过30个字符。 - **字符集**:除了首字符外,...
1. **批量删除**:尽量避免一次性删除大量数据,而是采用分批处理的方式,每次删除一小部分,以减少对系统资源的冲击。 2. **使用LIMIT**:在满足业务需求的情况下,可以考虑结合WHERE条件使用LIMIT限制每次删除的...
- 查询响应时间变慢(尤其是全表扫描) - 大量行迁移 - 空间浪费 值得注意的是,整理表碎片对于基于索引的查询性能提升有限。 #### 整理表碎片的方法 根据Oracle数据库版本的不同,整理表碎片的方法也有所不同: ...
考虑建立单列索引、复合索引、唯一索引和函数索引,但也要注意过度索引可能导致插入、更新和删除操作变慢。 3. **选择合适的连接类型**:内连接、外连接和交叉连接有不同的性能表现。理解何时使用笛卡尔积、自连接...
这些问题主要体现在数据存储碎片、磁盘利用率低以及数据读写速度变慢等方面。本文将探讨这些问题的原因,并提出相应的优化策略。 首先,地形数据的频繁更新是引发问题的主要原因之一。由于更新方式(图幅更新、范围...
而分区表则是针对大数据量的表,当表的数据量增长导致查询速度变慢时,为了提升性能,我们会将表的数据分割成多个分区,分布在不同的表空间上。这样,查询时只需要扫描相关的分区,而不是整个表,从而提高了效率。 ...
4. **控制索引数量**:对于经常变动且数据量大的表,建立过多索引可能导致插入、删除和更新操作变慢。一般而言,如果一张表的索引超过8个,应审查这些索引的必要性,考虑合并或删除一些独立索引,转而使用复合索引。...
7. **分页查询**:当处理大量数据时,分页查询是非常重要的。在Oracle中可以通过ROWNUM等方法来实现。 8. **删除记录**:在Oracle中,使用ROWID进行记录删除可以避免全表扫描,从而提高删除效率。例如: ```sql ...
Oracle SQL 优化是提高数据库性能的关键技术之一,尤其是在处理大量数据和复杂查询时。以下是一些重要的优化策略和技巧: 1. **执行路径优化**:Oracle 提供高速缓冲(Cache Buffering)机制来加速单表查询,但对于...
4. 使用索引:创建和维护适当的索引可以显著提升查询速度,但过多的索引可能导致插入、更新和删除操作变慢,因此需要平衡。 5. 避免全表扫描:尽可能使用索引,避免在WHERE子句中使用NOT IN、!=、等操作符,因为...
在操作大表或涉及大量记录时,应该考虑分段、分批执行,或者使用特定的优化技巧来避免程序响应过慢甚至失去响应。 Oracle数据库常用的字段类型包括CHAR、VARCHAR2、NUMBER、DATE等。CHAR类型是固定长度的字符串,而...
然而,当处理大量数据时,尤其是在有数十万条记录的情况下,In子句可能会变得非常慢,因为它需要对B表进行全表扫描,然后对每个A表的记录进行匹配。相比之下,Exists子句通常更快,因为它只需要检查是否存在匹配的...
数据操作语言Data Manipulation Language(DML),用来插入、修改、删除、查询,可以修改数据库中的数据。例如:INSERT(插入)、UPDATE(修改)、DELETE(删除)语句 数据查询语言 (Data Query Language, DQL)...
1. **非选择性导入**:Oracle的DUMP方式导出的数据在导入时无法仅选择特定表,导致在处理大量表时难以操作。 2. **约束问题**:存在外键约束和触发器的表在使用DUMP import时,禁用它们变得复杂,可能引发错误,导致...
Oracle支持一次性执行多条SQL语句,这对于大量数据的操作尤其有效。通过使用SQL*Plus、SQL*Forms等工具,并调整CARRAYSIZE参数(默认为200),可以显著提高数据库操作的速度,尤其是在处理大批量数据插入或更新场景...
虽然索引有助于提高查询速度,但也会占用额外的存储空间,并可能导致插入、删除和更新操作变慢。因此,创建索引需谨慎,应根据实际工作负载和查询模式来平衡性能和存储成本。 总结,Oracle数据库中的索引是一个复杂...