oracle统计sql优化方式和原理详解

上传人:m**** 文档编号:48524060 上传时间:2018-07-16 格式:DOCX 页数:2 大小:13.40KB
返回 下载 相关 举报
oracle统计sql优化方式和原理详解_第1页
第1页 / 共2页
oracle统计sql优化方式和原理详解_第2页
第2页 / 共2页
亲,该文档总共2页,全部预览完了,如果喜欢就下载吧!
资源描述

《oracle统计sql优化方式和原理详解》由会员分享,可在线阅读,更多相关《oracle统计sql优化方式和原理详解(2页珍藏版)》请在金锄头文库上搜索。

1、oracleoracle 统计统计 sqlsql 优化方式和原理详解优化方式和原理详解简介:oracle 统计类 sql 的优化,此篇只讲 count sum avg max min orderby,主要还是要知道索引存储列值和 rowid 的特性,我的博客里也有常用索引(树状索引)的详解。一.count(*)的优化直接上例子(假设 test 表有 10w 数据,列有 10 列):1.select count(*) from test?count(*)我们都知道是统计有多少数量,通常我们建表都会有一个主键 id,我们这条语句通过执行计划可以发现它是会走 index fast full scan

2、 ,已经走了主键这个索引;如果没有主键的情况,会走 table access full(全表扫描),不管是耗费 IO 和逻辑读都会比走索引多,效率自然会慢。捕鱼游戏 http:/原理:主键也是一个索引,而且不能为空,就意味着有一列包含 id 值和 rowid 的索引块已经产生了,oracle 在这一列上就能得到这个表的总数量,就不会选择全表扫描所有的数据块了,减少耗费的 IO 和逻辑读,从而提高效率。注意:使用 count(*)走索引,不管你的数据里有没有 null 值,索引列必须不能为空,不然需要加上 field(列名)is not null 的条件才能让 count(*) 走索引。二.su

3、m 和 avg 的优化1.select sum(amount),avg(amount) from test假设经常要统计 amount 字段求和或者平均数,可以在 amount 字段上加一个索引(通常好像没有这个说法),但是从提升效率和索引角度来说,建立 amount 字段的索引,也可以只在 amount 索引块上做扫描计算,注意的是用 sum 和 avg 也必须字段不为空或者加上?field(列名)is not null 的条件。原理同 count。三.max 和 min 的优化1.select max(amount) from test / select min(amount) from

4、test对于 max 和 min 两个,建立索引对优化效率来说尤其体现明显,可以自己看一下执行计划,走的是 index full scan。问题:为什么 sum 和 count 走的是 index fast full scan 呢,和 index full scan 有什么区别呢?原理:理解了索引结构的都知道,索引是有序的,而且索引块的数据 是从左到右依次从小到大,所以 min 只要扫描最左边那一个索引块,max 只要扫描最右边那个索引块,加起来只有 2 次 IO,所以 max 和 min 相对来说更快,耗费更小。棋牌评测网http:/2.select max(amount),min(amount) from test这样子写是不会走索引的,因为这样写还是先后 进行 max 和 min 运算,不管是先做max 还是 min 运算,在同时数据变化的时候,不全表扫描是不能保证哪个是最大,哪个最小,oracle 优化器也就会选择全表扫描了,所以可以改成这样子写,select max,min from (select max(amount) from test) a,(select min(amount) from test) b。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > IT计算机/网络 > 数据库

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号