限制特定用户的查询大小

时间:2015-09-23 16:53:32

标签: oracle oracle11g

是否有办法限制在Oracle中为用户返回的行。

我们有一些用户可以查询一些表,数百万条记录会降低数据库的性能,所以我想知道是否有人设置每个用户的最大记录大小。

例如,如果我有表:APP.HISTORY有10,000,000条记录而用户'dummy',我想设置为只能读取10,000条记录的虚拟用户。

例如,如果'dummy'执行:

select * from APP.HISTORY

它只会返回10,000条记录,而是尝试获取10,000,000条记录

1 个答案:

答案 0 :(得分:1)

没有任何内置功能可以限制每位用户的结果数量。

但是,即使您可以,也不一定能帮助您解决性能问题。

考虑例如:

之类的查询
select *
  from (select *
          from app.history
         order by some_field desc)
 where rownum < 2

根据您的要求,用户dummy将能够运行此功能并获取他感兴趣的单个结果。但是,假设some_field未编入索引,则即使此查询将返回单个记录,它仍然必须订购所有10,000,000条记录以生成该单行。

正如评论中OldProgrammer所建议的那样,考虑使用资源组,这是一种非常灵活且可配置的限制CPU和I / O使用的方式。

否则,如果您不信任用户dummy编写智能且高效的查询,则不要让他直接访问数据库。