暂无图片
Oracle函数MAX性能优化
我来答
分享
TML
2022-07-01
Oracle函数MAX性能优化

数据库版本:ORACLE RAC 11.2.0.4

表数据量:8000万

索引:gxsj(更新时间)这个字段有一个索引,其他字段无索引。

SQL语句:

select count(gxsj) from emp;

执行特别慢,十几分钟,请问有什么方法优化吗


select count(gxsj) from emp where gxsj is null;  --返回0

我来答
添加附件
收藏
分享
问题补充
7条回答
默认
最新
Uncopyrightable

有19c以上版本,可以试试 APPROX_COUNT_DISTINCT函数,号称提升了好几倍性能

select APPROX_COUNT_DISTINCT(rowid) from emp;

暂无图片 评论
暂无图片 有用 0
打赏 0
刘晓华

这个SQL没where条件,肯定是全扫描,加索引也没用,只能增大吞吐量,如并行

暂无图片 评论
暂无图片 有用 0
打赏 0

如果你的表近期有使用过analyze 分析命令,可以直接使用它查看行数,select table_name,num_rows,last_analyzed from user_tables where table_name='TABLE_NAME';  否则统计字典里的数据量是last_analyzed数据量记录的

暂无图片 评论
暂无图片 有用 0
打赏 0
赵勇

提供一下执行计划。

暂无图片 评论
暂无图片 有用 0
打赏 0
薛晓刚

count全表,表越大越慢。而且你还是经常update的表。

除非你用in-memory  加载到内存列式存储。那么一秒可以完成聚合

暂无图片 评论
暂无图片 有用 0
打赏 0
chengang

可以看一下执行计划。不知道 gxsj 列的定义是否允许为null

如果不为null 那么执行计划
该是 index scan 而不是 table scan

暂无图片 评论
暂无图片 有用 0
打赏 0
老虎刘

如果是正常的业务SQL, 建议从业务合理性方面进行优化 ;   如果只是偶尔查询一次, 可以使用并行.   这个sql , 正常来说不需要看执行计划, 应该是index fast full scan, 不管列定义是null还是not null

暂无图片 评论
暂无图片 有用 0
打赏 0
赵勇
2022-08-26
刘老师,您说的是正常情况。我的想法是怀疑“gxsj(更新时间)这个字段有一个索引”,其实是一个gxsj列上的函数索引,比如to_char之类的。所以,看一下执行计划,验证一下。同时,从执行计划上,还可能发现一些其它有价值的信息。
回答交流
Markdown


请输入正文
提交
相关推荐
oracle 表DML审计触发器
回答 1
对业务表DML时,到底报什么错?另外,对于insert,应该只有:new值,而无:old值,所以应该写成:insertintoAUDITDMLTABVALUES (:NEW.ID,null,
Oracle 审计grant权限
回答 4
已采纳
用了两条命令搞定了。auditallbyabyaccesswheneversuccessful;auditgrantona.tablebyaccess; 
手动收集单条sql执行计划报错,ORA-16957: SQL Analyze time limit interrupt
回答 1
已采纳
没人回答,我来补充下我最后的操作:从trace文件中可以看到有这样一句:fatalerroroccurredwhilescanningredo说明程序在查redo中相关记录的时候,这个redo文件已经
这个sql怎么进行优化
回答 4
已采纳
截图发现,看不清andTOCHAR(A.FBIZDATE,‘yyyymmdd’)>‘20190701’你这种写法,如果A.FBIZDATE有索引,也不会走,需要改成:A.FBIZDATE>
11.2.0.4打 gipsu20201020补丁,补丁更新完成后,集群无法启动
回答 2
补丁已经打上了,在启动集群时报错了,做的有备份,重启恢复集群可以恢复正常。
rac to rac的rman方式异机恢复
回答 2
参考https://www.modb.pro/doc/4652
oracle 关闭数据库+关闭电源,再次启动后,耗费大量时间,最后报错终止;再重启数据库就很快可以启动,请帮忙看看是什么原因导致的呢?
回答 3
已采纳
这个问题可能是由于Oracle在第一次启动时试图恢复在关闭电源时未完成的事务,这个过程可能会耗费大量时间。如果在这个过程中出现了错误,如数据文件损坏,Oracle可能会报错并终止启动。当你再次启动时,
Oracle表更新慢
回答 2
看等待事件是什么吧。正常就是改下数据字典。
【紧急救助】ORA-01110: 数据文件 1: 'D:\APP\ORACLE\ORADATA\ORCL\SYSTEM01.DBF'需要介质恢复
回答 1
已采纳
关闭数据库后,将数据库文件,控制文件,初始化参数文件,复制到新建的数据服务器,按照冷备的方式,恢复回去,在使用resetlogs方式打开。最终完成修复
怎么查看过期的分区,分区是基于事件来分的。
回答 3
查HIGHVALUEselecttablename,PARTITIONNAME,PARTITIONPOSITION,highvaluefromdbatabpartitions;selecttablen