oracle**库

时间:2014.06.24 发布人:小明zzzz

oracle**库

已解决问题

谷歌小明zzzz用户在2014.06.24提交了关于“窈窕淑女oracle**库”的提问,欢迎大家涌跃发表自己的观点。目前共有4个回答,最后更新于2024-01-08T05:42:51。

oracle**库
表t**有十万条如下**:
idnamebirthday
1张三1980\08\08
2李四1982\08\08
3张三1983\08\08
4王五1984\08\08
..
.
1000000赵老大1970\08\08
其中生日在1980年前的有3000人左右,并且表在birthday字段上建有索引,
需要查询生日在1980年前的人数,使用下面的sql语句可以实现
selectcount(0)
fromt
whereto_char(birthday,'yyyymmdd')<'19800101';
但是该sql语句的查询性能上有问题,
1.请修改sql语句,做一个简单的优化。
2.如果不能修改sql语句,有没有其他方法也可以满足性能要求。

希望大家能够帮助她。

详细问题描述及疑问:

oracle**库
表t**有十万条如下**:
idnamebirthday
1张三1980\08\08
2李四1982\08\08
3张三1983\08\08
4王五1984\08\08
..
.
1000000赵老大1970\08\08
其中生日在1980年前的有3000人左右,并且表在birthday字段上建有索引,
需要查询生日在1980年前的人数,使用下面的sql语句可以实现
selectcount(0)
fromt
whereto_char(birthday,'yyyymmdd')<'19800101';
但是该sql语句的查询性能上有问题,
1.请修改sql语句,做一个简单的优化。
2.如果不能修改sql语句,有没有其他方法也可以满足性能要求。

期待您的答案,真心佩服你,谢谢 !
希望以下的回答,能够帮助你。

第1个回答

用户名:Khitay  

selectcount(0)
fromt
wherebirthday<to_da问答te(,'yyyy句你财浓史府唱mmdd','19800101')

第2个回答

用户名:丫头0作职热医报迅19  

你可以看下你那个sql的执行策略你那种写法索引是用不上的

selectcount(*)
fromt
wherebirthday<to_date('19800101','yyyymmdd');这样写索引才大会起作用

第3个回答

用户名:gm365  

上面回答很好,

另外如果不可以更改SQL语句,

可以对表作一个针对函数的索引

CREATEINDEXT_官复儿功曲二倒IDX1ONT(to_char(b穿irthday,'yyyymmdd'));

第4个回答

用户名:太阳的骄傲  

wh称验简ereleft(birthd仍待化田北ay,4)<'1980'