利用索引优化的步骤

在工作过程中,参与到电商项目后,期间实际发生过一个真实的例子,也拿出来与大家分享一下。大家知道电子客票号对于电商网站来说,是非常好的索引,所以大家都会把这一列作为索引列(如KPNO)。例如电子客票号是由三位结算号加上10位票号构成,两者之间可以通过一个横线连接,有时候也可以直接连接。所以,我们在实际写代码的时候,希望利用票号查询一条记录,就有如下几种方式:

1、 select * from passenger where substr(kpno,4)=?

2、 Select * from passenger where kpno like ‘%’||?

3、 Select * from passenger where kpno = ‘999’||?(由于网站一旦确定,结算号就是确定的,如‘999’就是明确的)

4、 Select * from passenger where kpno = ?(这需要在前面JAVA代码中拼接结算号)

当然,可能还有很多其他方式,此处,我们就分析一下以上几种方式,可能对于大家以后开发项目比较有实际用处。

第一种是不能使用的,因为我们的数据表中一般没有建立函数索引,所以,如果使用第一种方式,kpno索引将不能使用,会带来全表扫描,导致数据库大量IO操作,再加上这种表数据量也是很大的,所以不仅对当前业务有影响,同时数据库响应减慢,严重时导致进程等待,最后让应用服务器崩溃,停止应用。

第二种,索引同样不能使用,因为通配符(%)放在前面了,索引只支持放在后面的,所以导致的情况,将和第一种情况类似。

第三种,索引是利用上了,性能将会得到大大提升,但是,让数据库进行了一项连接运算,不是不可以,这也会影响数据库的性能,原因就是电商的数据库本身压力是巨大的,每一点性能都要考虑,数据库擅长的是数据检索,对于运算,这种尽量交给前端应用服务器完成。

第四种,正是在第三种问题的基础上,完善得到了第四种,这一种是目前效果较好的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值