使用ROWID和ORA_ROWSCN调整查询

时间:2014-08-18 16:45:26

标签: performance oracle rowid sql-tuning

我有一个以下查询,因为表格非常大,需要花费很多时间,此查询还会获取伪列ROWID和ORA_ROWSCN。

select ROWID, ORA_ROWSCN, t.C1, t.c2, t.c5, t.c7, t.c9 from tab t

我尝试使用提示ALL_ROWS并运行统计数据,但仍然没有多大帮助。请建议。非常感谢提前。

1 个答案:

答案 0 :(得分:1)

Rowid和ora_rowscn都驻留在数据块内。

Rowid由以下内容组成:

  • 对象的数据对象编号

  • 行所在的数据文件中的数据块

  • 数据块中行的位置(第一行为0)

  • 行所在的数据文件(第一个文件为1)。文件号相对于表空间。

ora_rowscn为您提供行所在块的最后一个更改编号(不是行本身,请注意)。

这些都没有显着地占据从大表中检索所有行的总时间(除非您使用的是scn_to_timestamp函数)。

这里的问题是你没有WHERE子句,并且确实需要花费大量时间从大表中检索所有行。如果你确实需要所有的行,那么你可以使用任何列将查询切割成许多较小的查询,你可以开始更快地获得结果,甚至可以使整个过程(日期列,或者你可以在where子句上使用mod的ID列,类似的东西吗?