oracle语法2 -- 性能调优及与null值比较的异常

1、使用<> 或 !=的地方尽量改为< or >
由于不等于会导致全表扫描,改为or使用索引更高效
如:

select * from table t where t.age  !=20;
改为:
select * from table t where t.age <20 or t.age>20;

2、使用大于等于(>=)替换大于(>)
如:

select * from table t where t.age>20;
改为
select * from table t where t.age>=21;

注:如果表中有索引,这样会提高查询效率,因为!=、<>、 > 都会导致全表查询比较。

索引查询sql:

select * from user_indexes where table_name=upper('表名');

查询出索引名字
查询索引的列名

select * from user_ind_columns where index_name in ('IDX_227401_10','IDX_227401_7','IDX_227401_8');

查询出索引对应的列名
3、oracle语法中和null做判断都会有问题
如:

select * from tsecurity t 

表数据展示
正常来说,我想要查询出不为空的数据,应该只有第一条,但是下面这种写法是不对的
错误写法:

select * from tsecurity t where t.remark != null

这种查询方法把所以数据都过滤了,是有问题的
此时与null做判断应该写成:

select * from tsecurity t where nvl(t.remark,'*') != '*'

在这里插入图片描述
或者还有一种case when的方法也行;
case when方法

综上,与null做比较时处理语句应该有以下两种形式:

a.  nvl(字段名,‘ * ’) != ‘ * ’
b.   case when 字段名 is  null then '*'  else  字段名  end   !=  ' * '
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值