全表扫描的意思

上一篇 / 下一篇  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/Ip w02.全表扫描的稳定性
/]9}{ be1p0相对于索引范围扫描来说, 全表扫描的成本是衡定不变的.
*\&lQ3oHrY6W0无论你的查询是想访问一笔数据还是访问整个表的所有数据, 全表扫描都会把整张表读出来.
no8I.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软件测试网4p A'nB*bx_8C
        ◆访问的数据占全表数据的百分比很大, 索引访问的总成本大于全表扫描的成本.
:`?'z&P3ec[+n0        ◆相对于索引来说, 表中的数据排列过于凌乱, 表现出来就是索引的 clustering_factor 很大, 导致索引的访问成本剧增.
1vr\e&{0(2)多表连接
u3| ki1a)U;D"mlzU0        ◆hash join的时候, 内层表和外层表都可以使用全表扫描(对于某个单独的表的访问是否适用全表扫描, 这个又回到了单表查询的情况)
s5~)E[Lfb/W~h{0        ◆nest loop的时候, 外层表可以使用全表扫描, 内层表一般不用全表扫描.

TAG: Oracle

 

评分:0

我来说两句

Open Toolbar