A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 吴淑金 中级黑马   /  2012-6-7 09:34  /  1758 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

数据库有张表T_User




idRegName regDate regCount
1 lily2012-12-12 200
2lisa 2012-7-8300
3 tom2012-7-8 200
4 jerry2012-12-21 400

在regCount字段建了索引
以下请优化以下SQL语句,并说明优化点:
1)select RegName,regDate,RegCount from T_User where regCount<>300
2 ) select RegName,regDate,RegCount from T_User where regDate<'2012-12-12'
3)select RegName,regDate,RegCount from T_User where day(regDate)<20 and month(regDate) between 5 and 12
4)select RegName,regDate,RegCount from T_User where regCount+100<400

这是昨天实习招聘的笔试题,求教~~

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

4 个回复

倒序浏览
是因为语句不规范还是有错误要优化吗?
我觉得<>可以改为!=,易读;'2012-12-12'需要转换成日期类型才有可比性;between...and...改为>=及<=好一点,因为端点值容易让人误解;最后的改为regCount<300明显可以减少一次运算。
不知道是不是这样...

评分

参与人数 1技术分 +1 收起 理由
宋天琪 + 1

查看全部评分

回复 使用道具 举报
1)select RegName,regDate,RegCount from T_User where regCount<>300
select * from T_User where regCount<>300

2 ) select RegName,regDate,RegCount from T_User where regDate<'2012-12-12'
select *from T_User where regDate<'2012-12-12'

3)select RegName,regDate,RegCount from T_User where day(regDate)<20 and month(regDate) between 5 and 12
select * from T_User where day(regDate)<20 and month(regDate) between 5 and 12

4)select RegName,regDate,RegCount from T_User where regCount+100<400
select * from T_User  where regCount<300

不知道这样行不行,请大家指正。

评分

参与人数 1技术分 +2 收起 理由
宋天琪 + 2

查看全部评分

回复 使用道具 举报
刘豪 发表于 2012-6-7 15:23
1)select RegName,regDate,RegCount from T_User where regCount300
select * from T_User where regCount ...

变成Select * 效率不是更低。。。
回复 使用道具 举报
王针 发表于 2012-6-7 12:16
是因为语句不规范还是有错误要优化吗?
我觉得可以改为!=,易读;'2012-12-12'需要转换成日期类型才有可比 ...

我也不知道诶。。。哎。。。。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马