ITPub博客

首页 > 数据库 > Oracle > 全表扫描

全表扫描

原创 Oracle 作者:wzq609 时间:2014-06-02 21:39:59 0 删除 编辑

一 定义:在数据库中,不通过索引对表进行查询叫做全表扫描。全表扫描是数据库服务器用来搜寻表的每一条记录的过程,直到所有符合给定条件的记录返回为止。

二 全表扫描的成本 = 表的数据块总数 / 多块读取

     一般说来数据库在进行全表扫描时进行的是多块读取,也就是说每次从buffer cache中读取多块,而不是一次一块的读。另外,全表扫描的成本中并不包括对数据进行过滤和计算的成本。也就是说全表扫描的成本仅仅是读取数据的成本,而不包含对数据进行计算,过滤的CPU成本。

     相对于索引范围扫描来说,全表扫描的成本是衡定不变的。无论你的查询是想访问一笔数据还是访问整个表的所有数据,全表扫描都会把整张表读出来。而索引范围扫描就不同,因为有了索引这个有序的数据结构做支持,可以只访问需要的索引块和需要的数据块,而不是访问整张表。

三 何时适用全表扫描

1. 单表查询

  • 表很小,索引可能就比表还大。
  • 访问的数据占全表数据的百分比很大,索引访问的总成本大于全表扫描的成本。
  • 相对于索引来说,表中的数据排列过于凌乱,表现出来就是索引的 clustering_factor 很大,导致索引的访问成本剧增。

2. 多表连接

  • hash join的时候,内层表和外层表都可以使用全表扫描(对于某个单独的表的访问是否适用全表扫描,这个又回到了单表查询的情况)。
  • nest loop的时候,外层表可以使用全表扫描,内层表一般不用全表扫描。

 

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

本文作者:JOHN

ORACLE技术博客:ORACLE 猎人笔记               数据库技术群:367875324 (请备注ORACLE管理 )  

+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12679300/viewspace-1174246/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2013-06-16

  • 博文量
    173
  • 访问量
    3083838