首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 数据库 > Informix >

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

2013-01-04 
帮我优化一下SQL语句吧谢谢select d.useraccount from authdb_rms:userinfo d where d.userid in( select

帮我优化一下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 

热点排行