ORACLE-SQL性能优化-排序取第一条数据
在数据40万左右,排序后25万左右测试如下:
方式一(快一点): SELECT * FROM table WHERE (id,createtime) IN (SELECT id,MAX(createtime) createtime FROM table GROUP BY id);--获取时间最新的多条数据方式二partition by order by(慢一点) select a.* FROM (select * from (select t.*,row_number() over(partition by t.id order by t.createtime desc) rn from table t ) c where rn = 1) a
--性能好一点(3S)
select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME,TASK_CONTROLSTATE from V_DW_BPM_TASK
WHERE (TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME) IN
(select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,MAX(TASK_BEGINTIME) from V_DW_BPM_TASKinner join (select PROCESSDEFINITID --流程定义ID,ACTIVITYDEFID --节点定义ID,VERSIONNUM --流程版本号from BO_EU_NPD_PROCESS_NODE where IS_ANALYSIS='是') N on N.ACTIVITYDEFID = TASK_ACTIVITYDEFID AND N.PROCESSDEFINITID = TASK_PROCESSDEFIDwhere TASK_ACTIVITYTYPE = 'userTask' --统计人工活动节点 AND TASK_OWNER <> 'admin02' --admin02是默认用于系统任务创建的帐号,要排除统计AND TASK_CONTROLSTATE <> 'delete' --删除的节点实例不做统计 GROUP BYTASK_PROCESSINSTID,TASK_ACTIVITYDEFID
)--性能差一点(7S)
select TASK_PROCESSINSTID, TASK_ACTIVITYDEFID, TASK_CONTROLSTATE, TASK_BEGINTIME, rnfrom (--取节点实例中最新一条状态select a.*, row_number() over(partition by TASK_PROCESSINSTID,TASK_ACTIVITYDEFID order by TASK_BEGINTIME desc) rn from (select TASK_PROCESSINSTID,TASK_ACTIVITYDEFID,TASK_BEGINTIME,TASK_CONTROLSTATE from V_DW_BPM_TASKinner join (select PROCESSDEFINITID --流程定义ID,ACTIVITYDEFID --节点定义ID,VERSIONNUM --流程版本号from BO_EU_NPD_PROCESS_NODE where IS_ANALYSIS='是') N on N.ACTIVITYDEFID = TASK_ACTIVITYDEFID AND N.PROCESSDEFINITID = TASK_PROCESSDEFIDwhere TASK_ACTIVITYTYPE = 'userTask' --统计人工活动节点 AND TASK_OWNER <> 'admin02' --admin02是默认用于系统任务创建的帐号,要排除统计AND TASK_CONTROLSTATE <> 'delete' --删除的节点实例不做统计--AND (to_char(TASK_BEGINTIME, 'YYYYMMDD') = to_char(sysdate, 'YYYYMMDD') or to_char(TASK_ENDTIME, 'YYYYMMDD') = to_char(sysdate, 'YYYYMMDD'))) a) t where t.rn = 1
ORACLE-SQL性能优化-排序取第一条数据相关推荐
- oracle和mysql分组排序取第一条数据
场景 需求 查每个人的Orderstr 是1 的数据,并保证name不重复 oracle select * from (SELECT a.*, row_number() over(partitio ...
- oracle排序后第一条,Oracle排序取第一条数据
Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. Oracle需要更新套组的大单位, 规则是取第一个学员(套组ID最小)的单位信息. 采用按照SUITEID排序取第一 ...
- Oracle去重 并按时间排序取第一条
需求 按图所示,根据gfwtf_id 去重,并去重的条件是去最新创建的一条 第一种实现方法: select t.* from (select a.*, row_number() over(partit ...
- Oracle SQL性能优化的40条军规
Oracle SQL性能优化的40条军规 1. SQL语句执行步骤 语法分析> 语义分析> 视图转换 >表达式转换> 选择优化器 >选择连接方式 >选择连接顺序 & ...
- Oracle根据行号达到分组排序取第一条的效果,排序后取第一条
Oracle数据无法根据单个字段进行分组,而mysql可以,如果想要达到根据单个字段进行分组可以查询他的行号获取rowNumber达到单个字段分组取第一条效果 SELECT * FROM (SELEC ...
- ORACLE SQL性能优化系列 (一) black_snai
2019独角兽企业重金招聘Python工程师标准>>> ORACLE SQL性能优化系列 (一) 原创 2003年07月21日 18:34:00 标签: oracle / sql / ...
- oracle 性能优化培训,ORACLE SQL性能优化(内部培训资料)
ORACLE SQL性能优化系列 (一) 1. 选用适合的ORACLE优化器 ORACLE的优化器共有3种: a. RULE (基于规则) b. COST (基于成本) c. CHOOSE (选择性) ...
- mysql分组排序取第一条记录
方式1:内层使用DISTINCT SELECTtype,senderName,subTitle FROM(SELECT DISTINCTTYPE AS type,SENDER_USERNAME AS ...
- DB2数据库取第一条数据
DB2只取第一条数据 select * from table fetch first 1 rows only
最新文章
- Python正则表达式初识(二)
- python语言学了有用吗-转行学习Python开发有什么优势
- 为什么「道理都懂,然而执行力差」的现象如此普遍?
- UIControl事件
- 计算机族应常喝的健康饮品
- python keyboard库_python利用 keyboard 库记录键盘事件
- Android OpenGL ES 开发教程(24):Depth Buffer
- 2018.02.26 9周4次课
- 关于_MSC_VER的说明
- android5.1不生成odex
- 【渝粤教育】国家开放大学2018年秋季 2115T人体解剖学与组织胚胎学 参考试题
- 用户'MYCOMPUTER\ASPNET' 登录失败”的解决方法
- (30)auth模块(django自带的用户认证模块)
- CAN网络管理Autosar(入门)
- AIDA64内存与缓存测试过了算稳定吗_【AMD R52600X】装机实录、基本特性介绍及性能测试...
- Spring Boot入门教程(三十七):支付宝集成-手机网站支付
- python实现qq自动点赞_python实现自动点赞
- Jsoncpp 使用说明
- Java的“跨平台”特性
- 《王者荣耀游戏服务器架构演进(完整版)》读后感