我们在一个大约有 50 列的表中有大约 800 万条记录,我们需要非常快速地查看少量记录,因此我们为此目的使用 FIRST_ROWS(10) 提示,并且它的工作速度非常快。
SELECT /*+ FIRST_ROWS(10) */ ABC.view_ABC.ID, ABC.view_ABC.VERSION, ABC.view_ABC.M_UUID, ABC.view_ABC.M_PROCESS_NAME FROM ABC.view_ABC
但是,当我们放置 ORDER BY 子句时,例如创建时间(这几乎是该表中每一行的唯一值),此查询将需要很长时间才能返回所有列。
SELECT /*+ FIRST_ROWS(10) */ ABC.view_ABC.ID, ABC.view_ABC.VERSION, ABC.view_ABC.M_UUID, ABC.view_ABC.M_PROCESS_NAME FROM ABC.view_ABC ORDER BY ABC.view_ABC.CREATIONTIME DESC
我注意到的一件事是;如果我们为某个列(例如 VERSION)放置一个 ORDER BY,它对多行具有相同的值,它会提供更好的结果。
对于此表中的列这样的任何唯一列,这ORDER BY
都不能有效地工作ID
。
另一件值得考虑的事情是;如果我们减少要获取的列数,例如 3 列而不是 50 列,结果会以某种方式更快地出现。
PS 收集统计信息每周在此表上运行,但数据每小时推送一次。只有INSERT
语句在此表上运行,没有DELETE
或UPDATE
查询在此表上运行。
此外,还有一个没有创建此表的简单视图,上述查询正在同一视图上运行。