MySQL学习笔记 005:单表访问方法

1 单表访问方法

1.1 const

const:通过主键或唯一二级索引查询记录的访问方法。

  • 唯一二级索引包含多个列时,查询条件需包含所有列。
  • 查询条件为某一列为NULL时,不能使用const。

1.2 ref、ref_or_null

ref:搜索条件为二级索引列常数等值比较,形成单点扫描区间的查询方法。

  • 查询条件为某一列为NULL时,可以使用ref。
  • 二级索引包含多个列时,查询条件是最左边的列与常数比较时就可以使用。
    ref_or_null:比ref多了NULL的查询。

1.3 range

range:形成多个单点扫描区间或范围区间的查询方法。

1.4 index

index:查询列表中所有列被二级索引包含,查询条件也在二级索引中,不需要回表。

1.2 索引合并

1.2.1 intersection索引合并

同时使用两个索引查询,找出主键相同的记录执行回表操作。

  • 索引记录需要按照主键排序,便于提取交集、降低磁盘I/O。

1.2.2 union索引合并

同时使用两个索引查询,找出主键并集的记录执行回表操作。

  • 索引记录需要按照主键排序,便于提取并集、降低磁盘I/O。

1.2.3 sort-union索引合并

同时使用两个索引查询,找出主键并集的记录,根据主键排序后执行回表操作。

2 连接

  • 内连接:驱动表中的记录在被驱动表中找不到匹配记录时不加入结果。
  • 外连接:驱动表中的记录在被驱动表中找不到匹配记录时加入结果。左侧表为驱动表时为左外连接,右侧表为驱动表时为右外连接。
  • 驱动表、被驱动表:驱动表是第一个被查询的表,从驱动表中筛选符合条件的记录到被驱动表查询。

连接查询的方法:

  • 嵌套循环连接:被驱动表查询过程中可全表扫描或使用索引。
  • 基于块的嵌套循环连接:使用Joinbuffer缓存驱动表记录,减少被驱动表查询时产生的I/O。

3 成本分析

3.1 单表查询成本分析

查询的成本由I/O成本、CPU成本构成。I/O成本是从磁盘加载页到内存的时间。CPU成本是筛选、排序记录等操作的成本。这两项分别对应成本常数。
c o s t a l l = c o s t c p u + c o s t m e m cost_{all} = cost_{cpu} + cost_{mem} costall=costcpu+costmem
c o s t c p u = N r e c ∗ f c p u + b i a s c p u cost_{cpu} =N_{rec} * f_{cpu} + bias_{cpu} costcpu=Nrecfcpu+biascpu
c o s t m e m = N p a g e ∗ f m e m + b i a s m e m cost_{mem} =N_{page} * f_{mem} + bias_{mem} costmem=Npagefmem+biasmem
其中记录数量、页面数量可由表的统计信息得到。

3.2 连接查询成本

c o s t j o i n = c o s t d r i v e + f a n o u t ∗ c o s t d r i v e n cost_{join} = cost_{drive}+fanout*cost_{driven} costjoin=costdrive+fanoutcostdriven

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值