在rownum或with子句之间的Oracle 10g性能

曼索·皮埃尔·亚历山大(MançauxPierre-Alexandre)

我在用 Oracle Database 10g Enterprise Edition 10.2.0.4.0 64bit

我想知道,编写以下查询的最佳方法是什么?

1.与rownum

SELECT * FROM
  (
  SELECT ID_DONNEE_H, DATE_DONNEE
  FROM DONNEE_H d
  WHERE d.DATE_DONNEE > sysdate -50000
  AND d.ID_SC = 38648
  ORDER BY DATE_DONNEE DESC
  )
  WHERE rownum=1;

2.附有WITH条款

with req as (
  select d.ID_DONNEE_H, row_number() over (order by DATE_DONNEE desc) as seqnum
  from DONNEE_H d
  where d.DATE_DONNEE > sysdate -50000
  AND d.ID_SC = 38648 ) 
select * from req where seqnum = 1;

3.有等级条款

select * from (select d.ID_DONNEE_H, row_number() over (order by DATE_DONNEE desc) as seqnum
  from DONNEE_H d
  where d.DATE_DONNEE > sysdate -50000
  AND d.ID_SC = 38648) test
  where seqnum = 1;

我认为2和3相似,但是最快的是1、2或3?

骨干主义者

我认为您无法在所有情况下特别概括哪个查询是“最佳”查询。与大多数IT问题一样,答案是:“取决于”!您将需要根据其优点调查每个查询。

顺便说一句,您错过了另一种选择-假设您只关注单列,而不关注感兴趣的最高列的整行:

with sample_data as (select 10 col1, 3 col2 from dual union all
                     select 20 col1, 3 col2 from dual union all
                     select 30 col1, 1 col2 from dual union all
                     select 40 col1, 2 col2 from dual)
select max(col1) keep (dense_rank first order by col2 desc) col1_val_of_max_col2
from   sample_data;

COL1_VAL_OF_MAX_COL2
--------------------
                  20

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Oracle 10g。调用程序错误

来自分类Dev

Oracle Forms 10g ActiveX控件

来自分类Dev

Oracle 10g:插入多行

来自分类Dev

在Oracle 10g中将行转置为列

来自分类Dev

创建密码验证功能Oracle 10g

来自分类Dev

插入之前锁定ID-Oracle 10G

来自分类Dev

插入SQL Developer / Oracle 10g中的缺失值

来自分类Dev

将映像插入BLOB Oracle 10g

来自分类Dev

实体框架是否支持Oracle 10g?

来自分类Dev

不需要的查询在Oracle 10g中合并

来自分类Dev

关于在Oracle 10g中扩展嵌套表的困惑

来自分类Dev

Oracle Database 10G查询有待解决

来自分类Dev

oracle 10g速成版数据库连接

来自分类Dev

以Oracle形式10g发布显示记录

来自分类Dev

在Oracle 10g Express Edition中导入.dmp文件

来自分类Dev

Oracle 10g具有参数Error的游标

来自分类Dev

从Oracle 10g中的列获取数据

来自分类Dev

从Oracle 10g列获取小写字母

来自分类Dev

不需要的查询在Oracle 10g中合并

来自分类Dev

oracle 10g〜获取本地用户列表

来自分类Dev

在Oracle 10g pl \ sql中使用Web服务

来自分类Dev

oracle 10g报告中的错误计算

来自分类Dev

Oracle 10g:取消透视列名称和值

来自分类Dev

ORACLE 10g:如何获取所有目录

来自分类Dev

oracle 10g 使用更新和连接

来自分类Dev

oracle in子句以及rownum

来自分类Dev

Oracle报告10g至11g迁移问题

来自分类Dev

Oracle报告从10g到11g的迁移问题

来自分类Dev

表10的Oracle 10g更新表I列联接错误