数据库执行计划理解

oracle执行计划

执行计划执行顺序:

  1. 缩进最多最先执行,缩进相同最上面先执行
  2. 同一级如果某个动作没有子ID就最先执行

表访问方式

  1. TABLE ACCESS FULL :全表扫描
  2. TABLE ACCESS BY ROWID :Oracle中存取单行数据最快的方法
  3. TABLE ACCESS BY INDEX SCAN:索引扫描,首先扫描索引得到rowid,根据rowid定位到具体行
      (1). INDEX UNIQUE SCAN:针对唯一性索引扫描,最多返回1条记录
      (2). INDEX RANGE SCAN:索引范围扫描,使用了<>!=between等
      (3). INDEX FULL SCAN:索引全扫描
      (4). INDEX FAST FULL SCAN:索引快速全扫描,且不对查询出的数据进行排序
      (5). INDEX SKIP SCAN:索引跳跃扫描,复合索引中某列惟一值很少的情况

表连接方式
join:在读取做连接的两张表的数据时可以并行读取
驱动表:表连接时首先存取的表,应该取过滤限制条件后最小的表
匹配表:从驱动表获取一行具体数据后,会到该表中寻找符合连接条件的行。(大表)

  1. SORT MERGE JOIN:排序合并连接,a join b on a.id=b.id,先对a表按照id排序,在对b表按照id排序,然后合并两个表。排序-合并连接的表无驱动顺序,谁在前面都可以。
  2. NESTED LOOPS:嵌套循环,取出驱动表中第一行数据,扫描匹配表中所有数据,返回满足条件的行。
  3. HASH JOIN:哈希连接,只适用于等值连接,有驱动顺序。
  4. CARTESIAN PRODUCT:笛卡尔积连接

mysql执行计划

在这里插入图片描述
id
查询的序列号,id相同自上而下执行, id不同,如果为子查询id越大越先执行
select_type

  • simple:查询不包含子查询或union
  • primary:表示含有子查询的最外层查询
  • subquery:在select或where条件中的子查询
  • derived:在from中的子查询,结果存放在临时表
  • union:select出现在union之后
  • union result:从union中获取结果的查询

table
关于哪张表的查询
type
访问类型,查询优化指标,通常优化至少到range级别,最好能优化到ref。

system > const > eq_ref > ref > fulltext > ref_or_null > index_merge > unique_subquery > index_subquery > range > index > ALL

system:表只有一行记录
const:表示通过索引一次定位数据(主键或唯一索引)
eq_ref:唯一性索引扫描
ref:非唯一性索引扫描,返回匹配某个单独值的所有行(=)
range:只检索给定范围的行,使用一个索引来选择行(between,<,>,in)
index:全索引扫描
all:全表扫描

possible_keys
涉及到的字段上存在索引,但不一定使用
key
实际使用的索引
key_len
表示索引中使用的字节数,查询中使用的索引的长度(最大可能长度)
ref
显示索引的哪一列被使用了
rows
找到记录所需要读取的行数(估算值)
extra
额外信息

Using filesort:MySQL 对数据使用一个外部的文件内容进行了排序
Using temporary:使用临时表保存中间结果,常见于order by、group by
Using index:表示 SQL 操作中使用了覆盖索引
Using index condition:表示 SQL 操作命中了索引,但不是所有的列数据都在索引树上,还需要访问实际的行记录
Using where:表示 SQL 操作使用了 where 过滤条件
Using join buffer :表示 SQL 操作使用了关联查询或者子查询,且需要进行嵌套循环计算
Select tables optimized away:在没有group by子句的情况下,基于索引优化MIN/MAX操作或者对于MyISAM存储引擎优化COUNT(*)操作,不必等到执行阶段在进行计算,查询执行计划生成的阶段即可完成优化

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值