最大函数vs在Oracle中使用所有_序列

最大函数vs在Oracle中使用所有_序列,oracle,oracle11g,Oracle,Oracle11g,我定义了一个序列,专门用于表中的一列。增量为1,缓存为10。这是一个巨大的表,列上没有索引。我想知道该列的最大值。由于max函数将花费大量时间,我正在考虑使用all\u sequences视图的last\u number列。这是正确的方法吗?特别是涉及到缓存?因此,如果表是insert only而非deletes,并且1000是插入的最大值,我会将last_number视为1000吗 编辑: 我想知道这一点后,数据库是不可用的常规交通。运行此操作时没有其他连接。如果您真的需要知道列的最大值,可能

我定义了一个序列,专门用于表中的一列。增量为1,缓存为10。这是一个巨大的表,列上没有索引。我想知道该列的最大值。由于max函数将花费大量时间,我正在考虑使用
all\u sequences
视图的
last\u number
列。这是正确的方法吗?特别是涉及到缓存?因此,如果表是insert only而非deletes,并且1000是插入的最大值,我会将
last_number
视为1000吗

编辑:
我想知道这一点后,数据库是不可用的常规交通。运行此操作时没有其他连接。

如果您真的需要知道列的最大值,可能最快的方法是在该列上添加索引;这样,查询只需从索引中提取最后一个块即可确定最大值-您只需确保正确编写查询,以利用Oracle的最小/最大优化功能(例如,mytable中的
选择最大(id)
应该这样做,但先检查执行计划)


正如Justin所说,sequence generator不太可能用于此目的-不仅因为回滚,还因为其他序列功能,如缓存,递增以及它们在RAC环境中的行为方式意味着,
last\u number
通常会远高于列的实际最大值。

这通常不起作用。如果事务已回滚,或者其他会话已插入行但尚未提交,该怎么办?为什么要知道
max
值?您确定不想使用序列的
currval
(这将告诉您在当前会话中从序列中获得的最后一个值)。您想知道该列中的最大值还是表中的行数?