关于select * from table where Dcode in(1,2,3,4,5。。。。。)的效率问题,求一个更好的解决方案!急!!
不老书生 2005-06-08 05:20:52 需求是这样的,
管理一个多级的组织树,可以理解成多级的单位、部门,或者其他组织,一张表,company表
例如:
+ 公司a code 01
公司a之分公司1 code 0101
公司a分公司1子公司1 code 010101
公司a分公司1子公司2 code 010102
公司a分公司1子公司3 code 01010201
..........
公司a之分公司2 code 0102
公司a分公司2子公司1 code 020101
公司a分公司2子公司2 code 020102
公司a分公司2子公司3 code 02010201
+ 公司b
公司b之分公司1 code 02
......................
上面公司的层数都是动态的,用户可以随意增加。
每一级的每一个公司下面都对应很多信息,比如职工,公司计划、总结等等,分别放在同一个的员工表,计划表,总结表里面,用code字段和上面的company表的code字段关联
客户对权限的需求是这样的,某个用户可以管理一个或者若干个公司(通过权限设置),以及这个公司下面的信息
比如用户a可以管理code为010101和010102的两个单位,包括他们下面的人员、总结、计划等
我现在的设计是这样的,比如在管理人员的页面,
首先判断用户的权限,得到该用户的拥有权限的单位列表,如:010101,010102
比如该用户的公司权限是01,那么我们通过一种方法,找出01下面的(包含01)的所有公司的code,因为每一级别的公司自己下面都会有部门和人员(公司总部也有自己的部门和人啊,这些人的相应公司的code和company的code匹配)
然后我用语句select * from 员工表 where code in (010101,010102) 得到该用户能够有权管理的员工列表
我现在有个疑虑
in语句的效率问题,如果某个用户属于最顶级的用户,拥有所有公司的管理权,那么它的公司权限列表就会很长(01,0101,010101,010102,0102,010201....,02),这样在执行起搜索员工的信息,效率会不会很慢??
因为所有的业务都是和公司权限挂钩的,那么不可避免的所有页面都要用到where code in (。。。。)这样的语句,
设置连统计分析,出具的结果也要跟用户的权限挂钩,因为要统计的范围首先满足在用户的权限范围内
我先很为这样的系统真正应用时的效率担心!
希望高手来仔细考虑一下,看看我的担心是多余的,或者有没有更好的解决方法???不甚感谢