当前位置: 代码迷 >> Informix >> 帮小弟我优化一上SQL语句吧多谢
  详细解决方案

帮小弟我优化一上SQL语句吧多谢

热度:9909   发布时间:2013-02-26 00:00:00.0
帮我优化一下SQL语句吧谢谢

select d.useraccount from authdb_rms:userinfo d where d.userid in( select userid from authdb_rms:grpmember b where groupid in(select groupid from authdb_rms:usergroup a where groupname in(select groupname from neauthority f 
where f.nename='BSC923-G_JHtushuguan')))



上面这段SQL是不是效率很低? 我应该怎么优化它哪? 谢谢大家
------解决方案--------------------------------------------------------
select d.useraccount 
from 
authdb_rms:userinfo d ,
authdb_rms:grpmember b,
authdb_rms:usergroup a ,
neauthority f
where d.userid=b.userid
and b.groupid=a.groupid
and a.groupname=f.groupname
and f.nename='BSC923-G_JHtushuguan'

------解决方案--------------------------------------------------------
1、在连接字段上建立索引groupid groupnam;
2、
select d.useraccount 
from authdb_rms:userinfo d inner join authdb_rms:grpmember b
on d.userid=b.userid
inner joinauthdb_rms:usergroup a on b.groupid=a.groupid
inner join neauthority f on a.groupname=f.groupname
where f.nename='BSC923-G_JHtushuguan'

------解决方案--------------------------------------------------------
建议建立reference连接authdb_rms数据库上的表。
informix不支持inner,left, right一类。
authdb_rms 不是当前数据库么?
------解决方案--------------------------------------------------------
如果索引已经建立,两种SQL语句速度相差不大,从SQL语句方面应该没有什么优化方法了,
考虑一下表设计
------解决方案--------------------------------------------------------
建立索引(使用最频繁的字段),然后尽量使用联合查询,如left outer join之类的.
------解决方案--------------------------------------------------------
要是T-SQL,可以写在存储过程或函数里。
------解决方案--------------------------------------------------------
改下程序,生成临时表再select 
  相关解决方案