SELECT MAX(col_name)和ROWNUM = 1之间的性能

时间:2009-07-04 02:55:35

标签: sql

我怀疑以下查询的速度和结果。有人能给我解释吗? (这些为Oracle数据库编写的查询)

假设我有一个表 table1(ID,itemID,trnx_date,balance,...)。我希望得到一个项目的最新余额。

查询1:

SELECT balance FROM table1 WHERE ID =(SELECT1(ID)来自table1 WHERE itemID = item_id );

查询2:

SELECT balance FROM table1 WHERE itemID = item_id AND rownum = 1 ORDER BY ID DESC;

其中 item_id 是变量。

因此,这两个查询会给出相同的结果吗?哪一个更快,还是有任何其他查询比它们更快?

由于

1 个答案:

答案 0 :(得分:2)

Oracle中的

Rownum是在排序之前计算的(我之前的错误,我之前没有使用过Oracle)。因此,此查询与第一个查询相同:

SELECT 
    balance
FROM 
    (SELECT balance FROM table1 WHERE itemID = *item_id* ORDER BY ID DESC)
WHERE
    rownum = 1;

在这种情况下,给定ID的索引,这可能稍微更快。

为什么不自己运行它们来对它们进行基准测试?