在我的应用程序中,将有大量用户,超过500个。他们只处理一个模式对象。我已经授予了必要的特权。当我说:
SELECT * FROM EMP;
我得到“表或视图不存在”错误,因此意味着:
SCOTT.EMP
或我担心的是,如果公共同义词可以对这个拥有大约300个同时连接的用户的性能产生影响。我应该选择第一种还是第二种方法?
答案 0 :(得分:4)
公共同义词有一个非常特定的目的;它们允许每个用户引用一个对象 - 假设它们具有适当的权限。如果在将来的任何时候您可能想要更改特定用户查看对象的方式,那么公共同义词就不可能了。
它们还会使用整个数据库的特定对象名称。但是,存在公共同义词这一事实并不妨碍您创建具有相同名称的对象。这可能令人难以置信地令人困惑。
例如,假设您有一个过程test
和一个模式emp
。尝试执行emp.test
将无效,因为您已在表上使用公共同义词emp
。
Tom Kyte,seems to have written a number of articles about this.
在性能方面,他们似乎建议私人同义词的公共同义词将导致slight decrease in performance。但是,使用同义词而不是同义词也会导致性能略有下降。这表明,如果每一个computron都很珍贵,那么你就不应该使用同义词。
放在一起我认为这意味着你应该尽可能避免使用公共同义词。如果你需要一个然后当然使用一个,它们毕竟是存在的原因,但如果你不存在那么有一个是什么意义? scott.emp
构造是清楚的,显示您正在引用的模式和对象,没有任何误解的可能性,无论是您自己还是其他新来的数据库和代码。
快点。你没有明确说出来,但你问题的措辞似乎表明你正在为每个用户创建一个模式。这似乎会让人感到非常困惑......