首页 > 数据库 >Oracle 表内数据量少,但是查询速度很慢

Oracle 表内数据量少,但是查询速度很慢

时间:2024-06-05 12:01:00浏览次数:24  
标签:存储 数据库 查询 数据量 Oracle 碎片 数据 表内

优化方向

1.使用合适的索引:确保查询中涉及的字段有适当的索引。索引可以帮助数据库引擎快速定位和检索数据,提高查询效率。
2.避免使用通配符查询:尽量避免在查询条件中使用通配符 '%',因为这样的查询会导致全表扫描,影响性能。
3.避免使用函数:在查询条件中避免使用函数,尽量在字段上使用函数,因为函数会使索引失效,导致全表扫描。
4.使用合适的连接方式:根据实际情况选择合适的连接方式,如 INNER JOIN、LEFT JOIN 等,避免使用不必要的连接,以减少数据集大小。
5.限制返回列的数量:只选择需要的列,避免选择所有列。减少返回列的数量可以减少数据传输量,提高查询效率。
6.分页查询:对于大数据量的查询,使用分页查询可以减少数据传输量,提高查询性能。
7.使用 EXISTS 替代 IN:在查询中使用 EXISTS 子查询而不是 IN 子查询,因为 EXISTS 子查询通常执行更快。
8.定期分析执行计划:通过分析查询的执行计划,可以了解数据库是如何执行查询的,从而找到优化的方法。

查询表情况

SELECT 
    --    * 
    TABLE_NAME, TABLESPACE_NAME, BLOCKS, NUM_ROWS
FROM USER_TABLES

重建Block

ALTER TABLE table_name MOVE;

ALTER TABLE table_name MOVE的作用

ALTER TABLE table_name MOVE; 是 Oracle 数据库中的一条 SQL 语句,用于重新组织表的存储结构,即移动表的数据存储位置。这个操作可以解决一些与表存储结构相关的问题,例如:
1.解决碎片化问题:在 Oracle 中,表数据的存储可能会发生碎片化,即数据分散存储在不同的数据块中,这可能导致查询性能下降。通过移动表,可以重新组织数据,减少碎片化,提高查询效率。
2.重新整理表空间:移动表可以帮助重新整理表所在的表空间,优化表的存储结构,减少存储空间的浪费。
3.重建索引:在移动表的过程中,可以选择重建表的索引,从而优化索引的存储结构,提高索引的性能。
移动表的原理是将表的数据重新组织,重新分配存储空间,将表的数据按照新的方式存储,以达到优化存储结构的目的。在执行这个操作之前,建议先备份表数据,以防意外发生。移动表可能会导致表的锁定和数据不可用,因此在生产环境中需要谨慎执行,并在低峰期进行操作

碎片化的原因

在数据库中,碎片化是指数据在存储过程中出现的不连续、分散的情况。碎片化可能会导致数据库性能下降、空间浪费等问题。碎片化出现的原因主要包括以下几点:
1.数据删除和更新:当数据库中的数据频繁删除或更新时,会导致数据页中出现空洞,即已删除或更新的数据所占用的空间不再被使用,造成碎片化。
2.表空间分配不当:如果表的数据量增长较快,而表空间没有得到及时扩展,会导致数据分散存储在不同的数据块中,产生碎片化。
3.数据插入顺序不规则:数据插入顺序不规则也会导致碎片化。如果数据插入的顺序不是按照表的主键或索引顺序,会造成数据在磁盘上不连续存储。
4.数据库重建或重组:数据库进行表重建、索引重建或数据重组等操作时,可能会引起数据碎片化。
5.表的存储结构不合理:表的存储结构设计不合理也会导致碎片化。如果表的数据量较大,但存储空间分配不足或分配不均匀,会导致碎片化问题。
解决碎片化问题的方法包括定期进行表的重组、重新组织数据、优化索引、合理分配表空间等。通过这些方法可以减少碎片化,提高数据库性能和空间利用率

oracle 数据很少但是block值很大,这是什么问题导致的

在 Oracle 数据库中,一个数据块(block)是数据库中最小的存储单位,通常大小为 8KB。如果数据库中的数据量很少,但是数据块的大小很大,可能是由以下几个原因导致的:
1.表的存储参数设置过大:在创建表时,可以设置表的存储参数,如 INITIAL、NEXT、PCTINCREASE、MINEXTENTS、MAXEXTENTS 等。如果这些参数设置过大,会导致每个数据块的大小变大,即使表中的数据量很少,每个数据块也会占用较大的空间。
2.表的初始分配空间过大:在创建表时,可以设置表的初始分配空间(INITIAL)过大,导致每个数据块的大小增大。即使表中数据量很少,数据库也会分配较大的空间给表。
3.表的数据存储不连续:如果表的数据存储是不连续的,即数据分散存储在不同的数据块中,可能会导致单个数据块的大小增大。这种情况通常是由于数据的插入、删除操作导致的碎片化。
4.表的存储参数设置不当:表的存储参数设置不当也可能导致数据块的大小增大。例如,如果表的 PCTFREE 参数设置过大,会导致数据块中留有较多的空闲空间,增大了单个数据块的大小。
为了解决数据很少但数据块很大的问题,可以通过以下方法进行优化:
1.检查表的存储参数设置,合理设置 INITIAL、NEXT、PCTFREE 等参数。
2.定期进行表的重组、重新组织数据,减少碎片化。
3.如果表的数据量确实很少,可以考虑重新设计表的存储结构,减小数据块的大小。
4.使用 Oracle 提供的分区表功能,将数据按照一定的规则分散存储,避免单个数据块过大

 

标签:存储,数据库,查询,数据量,Oracle,碎片,数据,表内
From: https://www.cnblogs.com/CRobot/p/18232749

相关文章

  • ORACLE内存结构
    oracle内存结构主要有两部分组成,一个是系统全局区(SYStemGlobalArea,SGA),所有进程都可以访问该内存区域。另外一个叫进程全局区(ProcessGlobalArea,PGA),是一个进程专用的内存区域,其他进程不可以访问。1PGA介绍一个进程专用的内存区域,其他进程不可以访问。每个进程的PGA......
  • 成为MySQL DBA后,再看ORACLE数据库(六、逻辑存储结构)
    数据库的逻辑存储结构也可以叫做存储层次体系,ORACLE的存储层次体系按照层次从高到低分为:表空间(tablespace)、段(segment)、区(extent)、块(block)。熟悉数据库的逻辑存储结构可以帮助我们分析与定位数据库的空间容量问题。一、段段是表空间的主要组织结构。段就是占用存储空间的数据库......
  • Oracle优化神技之临时表
    Oracle临时表在处理临时数据、会话数据隔离和复杂查询优化方面非常有用。其底层逻辑是通过Oracle特殊的临时表来减少I/O操作和日志开销,提高了数据库性能和查询效率。开发者可以根据具体需求和场景,合理使用临时表来简化数据处理逻辑和提高系统性能。早期开发人员在使用Oracle数据......
  • Oracle获取吞吐量和IOPS的脚本
     Oracle获取吞吐量和IOPS的脚本 数据底层存储要换盘,对新盘做IOPS压测。并花了点时间写了脚本获取数据库每秒的吞吐量和IOPS信息。可以将数据导成excel并绘制为折线图等统计图。  --获取IOPS(当前实例)selectto_char(t.begin_interval_time,'yyyy-mm-ddhh24:mi')......
  • Oracle RU和RUR(补丁)
    以前Oracle的周期是约5年省级一个大版本,在这个大版本上做小的升级(PSU与BP),在12c发布以后,oracle数据库产品的新版本发布改为每年一次。随着版本的变化,oracle的升级也发生了变化。12.2以后,主要是通过RU(ReleaseUpdates)与RUR(ReleaseUpdateRevisions)升级,那么什么是RU(ReleaseUpd......
  • [Oracle]索引
    【版权声明】未经博主同意,谢绝转载!(请尊重原创,博主保留追究权)https://www.cnblogs.com/cnb-yuchen/p/18032039出自【进步*于辰的博客】参考笔记一,P25.27、P26.28、P30.2;笔记二,P69.5、P70/71。注:索引是一种数据结构(B树或B+树)。索引的“宏观”表现可以是“一棵树”,或者是树......
  • Oracle系列---【ORA-00257: Archiver error. Connect AS SYSDBA only until resolved
    ORA-00257:Archivererror.ConnectASSYSDBAonlyuntilresolved1.问题描述过了个周末,发现系统登录不上了,查看日志,发现报"ORA-00257:Archivererror.ConnectASSYSDBAonlyuntilresolved",明显数据库有问题了,我用客户端连,也报这个错误。2.问题分析经过一番查询,是因......
  • Oracle之SQL优化实战分析
    分享一个案例,一条SQL引发的“血案”!技术人人都可以磨炼,但处理问题的思路和角度各有不同,希望这篇文章可以抛砖引玉。以一个例子为切入点一、问题背景这是一个数据仓库系统,正常情况下每天0~6点会跑批,生成前一天的业务报表,供管理层分析使用。某天凌晨,监控系统频繁发出告警,大批业务报......
  • 基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法
    基于docker的oracle12.2.0.1部署及oracle使用与docker镜像容器制作迁移方法本文介绍了基于docker的oracle12.2.0.1部署,包含了oracle基本配置、监听器和实例启动方法、PDB和CDB操作方法、表空间建立和用户数据库建立、常见启动问题解决等,并介绍了镜像制作、镜像打包、镜像迁移......
  • 成为MySQL DBA后,再看ORACLE数据库(五、内存管理)
    一、前言在数据库的体系结构中,内存区是非常关键的一部分,一般而言数据库实例也是由内存+后台进程组成。不同于MySQL的单进程多线程架构,ORACLE是多进程架构,所以在内存管理上也更加复杂。ORACLE的内存管理一般分两部分:PGA(ProgramGlobalArea)和SGA(SystemGlobalArea)。翻开当年学习O......