是否有办法限制在Oracle中为用户返回的行。
我们有一些用户可以查询一些表,数百万条记录会降低数据库的性能,所以我想知道是否有人设置每个用户的最大记录大小。
例如,如果我有表:APP.HISTORY有10,000,000条记录而用户'dummy',我想设置为只能读取10,000条记录的虚拟用户。
例如,如果'dummy'执行:
select * from APP.HISTORY
它只会返回10,000条记录,而是尝试获取10,000,000条记录
答案 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
编写智能且高效的查询,则不要让他直接访问数据库。