SQL的几个编码规范


1.避免在where子句中对字段施加函数,这样将导致索引失效,比如:

select * from user where to_char(create_time,'yyyymmdd')='20090101';
原因:在建立index的时候是根据字段来建立的,也就是说oracle在inidex的时候是索引的字段的值,如果提供给oracle的是一个需要经过函数处理的比较,oracle就没办法通过索引中的索引键值来进行相应的比较,所以就不会走到索引上

2.避免在SQL中发生隐式类型转换

如:
select * from user where id='123'; --这里ID是NUMBER型,会造成oracle将id先转换成varchar类型再比较,造成索引失效
select * from user where gmt_create = to_char('2000-01-01','yyyy-mm-dd'); --这里gmt_create是date型,会造成oracle将gmt_create先转换成varchar类型再比较,造成索引失效

3.全模糊查询无法使用INDEX,应当尽可能避免

select * from user where name like '%value%';

4.如果使用Oracle数据库,使用Oracle的外连接,而不是标准的外连接语法

正确:select * from user1 a,user2 b where a.id=b.id(+);
错误:select * from user1 a left join on user2 b a.id=b.id;

5.分页语句必须使用三层嵌套的写法

select * from
(select rownum rn,a,* from
(select * from table where 条件 order by 条件) a
where rownum<=100) where rn>80;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值