提高SQL性能方法

一、排序优化

1、知识点=优化原理

首先,索引是有序的,通过索引,可以避免排序;其次,排序操作是昂贵的,资源开销较大,特别事需要排序的结果集较大时,更是如此。排序往往是成为一条SQL中最消耗资源的处理步骤。所以,如果可以通过索引来避免排序,则可能降低资源的开销,提高SQL的执行效率。

2、问题SQL

由于该问题是在生产环境,无法截图,只能口述啦,实际也是一样
select * from (select c1,c2 from t1 order by c1 desc)where rownum < 3;
可在查看数据库中查看执行计划

3、优化方法

该SQL是在c1上进行倒序排序,然后返回前两行。虽然最终结果只需要两行,但这两行却是在全部行排序的前提下获得的;记,其实际上是对全部记录的排序。如果我们在排序列c1上创建索引,则可能避免排序,从而降低资源消耗。

4、优化效果

在c1上创建索引
create index t1_index on t1(c1);
再执行2中的SQL,并查看执行计划

二、有索引但部分条件无法正常使用索引

1、知识点

该问题主要出现在模糊查询like当中。
正常情况下like表达式中的通配符“-”和百分号“%”出现在条件的最后,我们可以通过前面的字符进行定位和过滤。但是若%出现在最前面,我们只能改写将列中的值进行反转(reverse),使出现在前面的%转换到后面,同时在相关列上创建反转函数索引来使用上索引。
**注意:**当两头都有%,该方法将失效,所以,除非必要,尽量在表达式前面使用%

2、问题SQL

该表具有一个索引(c1可进行模糊查询,eg:userna me):
create index t2_index on t2(c1);
查询语句:
select * from t2 where c1 like ‘%zhang%’;
3、优化方法
保证结果集一样的情况修改查询SQL:
select * from t2 where c1 like ‘zhang%’;
可查看执行计划

三、常规优化

1、知识点
sql的解析方式:from语句从右到左(针对多表连接查询时,数据量要从左往右依次减少)
where语句从下到上(针对多表连接查询时,连接在前,条件在后

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值