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