全扫描的影响因素之数据舍弃的百分比
来源:互联网 发布:科比数据图 编辑:程序博客网 时间:2024/05/16 16:13
请记住,全扫描是否为高效的选择取决于需要访问的数据块个数(IO操作)以及最终的结果集行数(舍弃的百分比)。如上一篇‘全扫描的影响因素之数据在数据块中的存储方式’中例子所示,数据的存储返回时在优化器决策的过程中扮演了重要的角色。此外,全扫描是否为高效的选择的另一个关键因素的舍弃。舍弃的行是那些用过筛选谓语(where条件)来进行验证,被证明是不符合条件后从最终的结果集中剔除的数据行。
在上一篇的例子中,全表扫描运算必须检查表中的所有的10000行数据并舍弃其中的9700行,以得出最终的300行结果集。对于每一行所做的检查就仅仅是筛选谓语id<3。为了执行这个筛选,每一次检查都会使用CPU,这也就意味着尽管需要访问的数据块数目是有限的,为了完成每一行的检查筛选仍需要话费相当多的CPU资源,所以,CPU的使用成本也会归入到全扫描的成本中。
随着时间的推移,新的行被插入到表中使得表更得越来越大,舍弃这么多的数据行的成本也不断增加,到一定程度时优化器将会自动切换到使用索引扫描运算。
测试:将原来的10000行数据加到1000000行
> 清空表中的旧数据:
> 查看解释计划:
在上一篇的例子中,全表扫描运算必须检查表中的所有的10000行数据并舍弃其中的9700行,以得出最终的300行结果集。对于每一行所做的检查就仅仅是筛选谓语id<3。为了执行这个筛选,每一次检查都会使用CPU,这也就意味着尽管需要访问的数据块数目是有限的,为了完成每一行的检查筛选仍需要话费相当多的CPU资源,所以,CPU的使用成本也会归入到全扫描的成本中。
由上可知,所访问的数据快的数目以及舍弃的数量越大,全扫描的成本也就越高。
随着时间的推移,新的行被插入到表中使得表更得越来越大,舍弃这么多的数据行的成本也不断增加,到一定程度时优化器将会自动切换到使用索引扫描运算。
测试:将原来的10000行数据加到1000000行
> 清空表中的旧数据:
delete from seq_scan_store_2> 修改function:
create or replace function func_seq_scan_2() returns void as $$ begin for i in 1..1000000 loop insert into seq_scan_store_2(sid,name1,name2,name3,name4,name5) values(mod(i,100),'zhansang'||(i/100),'lisi'||(i/100),'wangwu'||(i/100),'zhaoliu'||(i/100),'wangba'||(i/100)); end loop; end $$language plpgsql;> 插入数据:
select func_seq_scan_2();
> 查看解释计划:
通过增加数据已经使优化器放弃了全表扫描要使用位图索引扫描,
此时的该表全部数据所跨越的数据块有11000多个
0 0
- 全扫描的影响因素之数据舍弃的百分比
- 全扫描的影响因素之数据在数据块中的存储方式
- 影响数据检索效率的几个因素
- google优化之空间因素的影响
- 影响股价的因素
- 影响意志力的因素
- 影响汇率变动的因素
- 影响SEO的因素
- 影响黄金的因素
- 影响汇率的因素
- 影响股市的因素
- 影响黄金价格的因素
- 电影票房的影响因素
- oracle IO的影响因素
- 影响项目失败的因素
- 影响Hibernate性能的因素
- 内存对齐的影响因素
- 影响网站排名的因素
- 使用简洁的 Navigation Timing API 测试网页加载速度(不完全译文)
- COM技术初探
- Git中关于 git pull 的一些问题
- centos安装mysql-proxy
- LitePal学习总结 (三)
- 全扫描的影响因素之数据舍弃的百分比
- spring之路径跳转(一)
- MySql5.0重装以及恢复之前的数据库
- retain strong 和 copy 讨论,有建议的的童鞋请留言
- 《观止——微软创建NT和未来的夺命狂奔》读后感
- CodeForces 464D World of Darkraft - 2 概率DP 近似计算
- 倒排索引结构
- InputStream重用技巧(利用ByteArrayOutputStream)
- 2013 lost connection to mysql server during query