我有一个定义的序列,我专门用于表中的列。递增1和缓存10.这是一个巨大的表,列上没有索引。我想知道列的最大值。由于max函数需要花费大量时间,因此我正在考虑使用last_number
视图的all_sequences
列。这是正确的方法吗?特别是涉及缓存?因此,如果表是仅插入且没有删除,并且1000是插入的最大值,我会将last_number
视为1000吗?
编辑: 在数据库不可用于常规流量后,我想知道这一点。我运行时没有其他连接。
答案 0 :(得分:1)
如果您确实需要知道列的最大值,可能最快的方法是在该列上添加索引;这样查询只需要从索引中获取最后一个块来确定最大值 - 您只需要确保正确编写查询以利用Oracle的MIN / MAX优化(例如SELECT MAX(id) FROM mytable
应该这样做 - 但首先检查执行计划)
正如Justin所说,序列生成器不太可能用于此目的 - 不仅仅是因为回滚,还有其他序列功能,如缓存,递增以及它们在RAC环境中的行为方式意味着last_number
通常预期会比列的实际最大值高得多。