全表扫描的意思
上一篇 /
下一篇 2009-01-13 23:12:28
/ 个人分类:Oracle
- 文件版本: V1.0
- 开发商: 本站原创
- 文件来源: 本地
- 界面语言: 简体中文
- 授权方式: 免费
- 运行平台: Win9X/Win2000/WinXP
全表扫描就是把整张表的数据块全部读取出来.51Testing软件测试网kJqVKn(w
/Z6o;V(_/n,f|01.全表扫描的成本
4w0xg8D3?%k0全表扫描的成本 = 表的数据块总数 / 多块读取51Testing软件测试网6r1Pq$kM-uj
i9d_}6YP0cost of table full scan = user_tables.blocks / db_file_multiblock_read_count51Testing软件测试网3x.@;Fw!~_ i
DH)] eQ#i'f i0从这里可以看出来, oracle在进行全表扫描时进行的是多块读取, 也就是说每次从buffer cache中读取多块,而不是一次一块的读.51Testing软件测试网wT*wn;C"Y
另外, 全表扫描的成本中并不包括对数据进行过滤和计算的成本.51Testing软件测试网8yG!R3Bv2E1b-S,H?"c A[
也就是说全表扫描的成本仅仅是读取数据的成本, 而不包含对数据进行计算,过滤的cpu成本.
*ciPigE%G0
T!@fW&C6R/Ipw02.全表扫描的稳定性
/]9}{be1p0相对于索引范围扫描来说, 全表扫描的成本是衡定不变的.
*\&lQ3oHrY6W0无论你的查询是想访问一笔数据还是访问整个表的所有数据, 全表扫描都会把整张表读出来.
n o8I.P`"y;J6AV0而索引范围扫描就不同, 因为有了索引这个有序的数据结构做支持, 可以只访问需要的索引块和需要的数据块, 而不是访问整张表.51Testing软件测试网
n'iXDg1\O?`M
51Testing软件测试网PJ
J0j;i ?8P#f8m
3.何时适用全表扫描51Testing软件测试网8R]%j~,Ua2Y4H#^0~
(1)单表查询51Testing软件测试网#A?#pV!DAN
◆表很小, 索引可能就比表还大51Testing软件测试网4pA'nB*bx_8C
◆访问的数据占全表数据的百分比很大, 索引访问的总成本大于全表扫描的成本.
:`?'z&P3ec[+n0 ◆相对于索引来说, 表中的数据排列过于凌乱, 表现出来就是索引的 clustering_factor 很大, 导致索引的访问成本剧增.
1vr \e&{0(2)多表连接
u3| ki1a)U;D"ml zU0 ◆hash join的时候, 内层表和外层表都可以使用全表扫描(对于某个单独的表的访问是否适用全表扫描, 这个又回到了单表查询的情况)
s5~)E[Lfb/W~h{0 ◆nest loop的时候, 外层表可以使用全表扫描, 内层表一般不用全表扫描.
相关阅读:
- ORACLE常用问题1000问全集(七) (lgwmlx, 2009-1-07)
- ORACLE常用问题1000问全集(八) (lgwmlx, 2009-1-07)
- ORACLE常用问题1000问全集(九) (lgwmlx, 2009-1-07)
- ORACLE常用问题1000问全集(十) (lgwmlx, 2009-1-07)
- 推荐1个数据库的学习资料给大家 (唱歌不走调, 2009-1-08)
- 磁盘排序,影响Oracle数据库性能的罪魁祸首 (fishy, 2009-1-09)
- Oracle HowTo:如何快速杀死占用过多资源(CPU,内存)的数据库进程 (lgwmlx, 2009-1-12)
- 从问题入手帮你解决Oracle杀死死锁进程 (lgwmlx, 2009-1-12)
- 查找运行慢的进程及SQL语句 (lgwmlx, 2009-1-12)
- 甲骨文裁减数百名营销和销售员工 (fishy, 2009-1-13)
收藏
举报
TAG:
Oracle