问题
问答题
【问题5】
假定分别在“职工”关系中的“年龄”和“月工资”字段上创建了索引,如下的 Select查询语句可能不会促使查询优化器使用索引,从而降低查询效率,请写出既可以完成相同功能又可以提高查询效率的SQL语句。
Select 姓名,年龄,月工资 from 职工
where 年龄>45 or 月工资<1000;
答案
参考答案:
Select 姓名,年龄,月工资 From 职工 Where 年龄>45 UNION Select 姓名,年龄,月工资 From 职工 Where 月工资<1000; 因为该SQL语句用了查询嵌套和聚集函数,所以这种方式的查询效率会受到很大的影响。可以把它改成: Select Max(月工资)As maxgz,部门号Into Temp From 职工 Group by 部门号 Select 职工号 From 职工,Temp Where 月工资=maxgz And 职工.部门号=Temp.部门号; 在语句 Select 姓名,年龄。月工资 From 职工 Where 年龄>45 or 月工资<1000; 中,由于使用了条件“Or”,查询的时候变成了对全表的扫描,不会促使查询优化器使用索引,从而降低了查询效率。改正的方法是去掉“Or”,修改后的SQL语句如下: Select 姓名,年龄,月工资 From 职工 Where 年龄>45 UNION Select 姓名,年龄,月工资 From 职工 Where 月工资<1000;