您的位置:首页 > 数据库

sql优化

2016-06-14 09:01 369 查看
这是原始的sql
select COUNT(1)
from veh_passrec ve
where ve.hphm = '湘E4TT52'
and ve.gcsj > to_date('2016-06-12 17:16', 'yyyy-mm-dd hh24:mi:ss')
and ve.GCSJ < to_date('2016-06-13 17:16', 'yyyy-mm-dd hh24:mi:ss')
order by ve.GCSJ asc;

查询时快时慢,我们借助pl/sql来看看它的执行计划:可以看到,当优化目标为rule时,它是进行的全表扫描



当优化目标为choose时,它是走的索引



实际是,当我们没有指定索引时,数据库会按照自己认为的最优化的方式去执行.

接下来,我们将这条sql优化一下,给它指定索引,在统计个数时,是可以把排序去掉的,而且统计个数时最好不要多表关联查询.优化之后就是这样子的了

select /*+index(ve INDEX_PASSREC_HPHM_GCSJ)+*/
COUNT(1)
from veh_passrec ve
where ve.hphm = '湘E4TT52'
and ve.gcsj > to_date('2016-06-12 17:16', 'yyyy-mm-dd hh24:mi:ss')
and ve.GCSJ < to_date('2016-06-13 17:16', 'yyyy-mm-dd hh24:mi:ss')


我们再来看看它的执行计划,当选择rule时


当选择choose时
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql优化