函数索引的妙用

今天生产环境出现这么一个性能问题,简单的描述下:

有个学生表student ,有年级grate,系Mathematics,班级class,年龄age,姓名name,性别sex,这是个千万级的大表,其中grate+Mathematics建了组

合索引,因为资料录入的问题,班级,年龄,姓名,性别有空的情况,现在有个循环里sql出现了性能问题

select grant,Mathematics,name
from student
where grant = 1
and Mathematics = 'Department'
and nvl(class,1)=1
and nvl(age,20)=20
and nvl(name,'aa')='aa'

查看执行计划,sql用到了grate+Mathematics索引,但是1+‘Department’的资料量有60多万,导致索引的效率很低,再加上要循环执行20万次,导致

程序运行了10个小时,这该怎么办了,其他字段都用了nvl函数,直接建索引也会因为nvl函数的使用而不会被执行计划采用。。。。。这时想到了函数索

引,因grate+Mathematics+name可以将数据量锁定到很小的范围,这样不就快了嘛!!!于是我们建了grate+Mathematics+nvl(name,'aa')函数索引

一下子就解决这个办法,执行时间从10小时缩短到不到1个小时!!!!

其实函数索引我们并不是不知道,只是有时候到了关键时候却不知道使用,说到底还是经验的问题,最后用一句话来总结:

纸上得来终觉浅,绝知此事要躬行

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值