5类权限,5个exists,运算关系是or
oracle的解析机制是,从左到右,判断exists是否存在
如果第一个exists成立,则不往下执行,直接返回
如果第一个exists 不成立,则执行第二个exists,直到成立的那个exists
理想状态下,只需要执行一个exists
最坏状况下,需要执行5个exists
当用户配置了所有的交付单元权限,那么只需要执行一个exists,速度自然快
当用户只配置了少许交付单元的权限,那么可能只需要执行5个exists,性能自然差
方案
短期方案
在拼凑SQL之前,逐一判断5类权限
只返回存在权限配置的SQL,即只返回exists为真的SQL
缺点,如果每类权限都有分配,但是都是非常小量的分配,仍然会导致5段SQL判断
长期方案
将鉴权的代码做成物化视图
物化视图采用fast refresh on commit
心得
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/693533/viewspace-1985236/
,如需转载,请注明出处,否则将追究法律责任。