日期:2014-05-18  浏览次数:20412 次

SQL高效率问题
1.查询每个部门中月工资最高的“职工号”的SQL查询语句如下:
select   职工号   from   职工e     where   月工资=(select   max(月工资)   from  
职工   as   m   where   m.部门号=e.部门号)

问题1:请用30字以内文字说明该查询语句对查询效率的影响
问题2:对该语句修改,使之既可以完成相同功能有能提高查询效率

2.假定分别在“职工”关系中的“年龄”和“月工资”字段上创建索引,如下查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的语句。
    select   姓名,年龄,月工资   from     职工   where   年龄   > 45   or   月工资 <10000

------解决方案--------------------

select a.姓名,a.年龄,a.月工资
from 职工 a
where not exists(select 1 from 职工 where a.姓名=姓名 and a.月工资> 月工资) and a.年龄 > 45 or a.月工资 <10000
------解决方案--------------------
1.查询每个部门中月工资最高的“职工号”的SQL查询语句如下:
select 职工号 from 职工e where 月工资=(select max(月工资) from
职工 as m where m.部门号=e.部门号)

跟据你的题意得:
select 职工号 from (select 职工号, max(月工资) from 职工e group by 部门号) A

从查查询结果得到结果中得到职工号比用条件查询要快。


2.假定分别在“职工”关系中的“年龄”和“月工资”字段上创建索引,如下查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的语句。
select 姓名,年龄,月工资 from 职工 where 年龄 > 45 or 月工资 <10000

可改写:
select 姓名,年龄,月工资 from 职工 where 年龄 > 45
union all select 姓名,年龄,月工资 from 职工 where 月工资 <10000