简析MDAM(Multi Dimensional Access Method)之一

在传统的关系型数据库中,我们经常使用"B-树"索引来提升查询性能。B-树索引通常包含表的一个或多个字段,比如一个销售表sales上有一索引包括三个字段(date,store,item)。现有一需求是查询某一天某个商店对于某个商品的销售额,查询SQL大致为:select sum(price) from sales where date=’’ and store=’’ and item=’’,这个查询肯定是可以充分利用此索引的,因为每个条件都在索引字段中。现有另一需求是查询最近一周所有商店对于某个商品的销售额,查询SQL大致为:select sum(price) fro sales where date between ‘’ and ‘’ and item=’’,对于这个查询很多关系型数据库可能无法利用上述的索引从而只能走全表扫描,而MDAM可以很好的解决这一问题。

举个例子,以下这张图是一个B-树结构,包括三个字段,每个字段有三个不同的值1 2 3。图中的a代表查询条件(dimension_1=1 and dimension_2=2 and dimension_3=2)时只扫描一条数据。b代表查询条件(dimension_1=1 and dimension_2=2 )时需要扫描三条数据。c代表查询条件(dimension_1=1)时需要扫描9条数据。
这里写图片描述

下面这张图使用同样的B-树结构,但是查询条件是(dimension_3=2)。如果是传统数据库,因为dimension_1和dimension_2都没有给定条件,因此需要扫描所有27条数据。而使用MDAM则只需要扫描图中灰色部分的数据,缩小查询范围到三分之一。
这里写图片描述

上述例子只是MDAM支持的场景中的其中一个,实际上, MDAM的能力及特性可以主要概括如下:

  1. 部分字段属于范围查询
  2. 缺失部分字段的查询条件
  3. 多个字段的IN语句,如item_class IN (20, 35, 50) and store IN (200, 250)
  4. 不等于<>条件,如dept NOT=3
  5. 字段查询条件包括多个值,如(dept, date, item_class ,store) = (10,
    “06/04/95”, 20, 250)
  6. 消除冗余条件,MDAM在真正读取数据之前对条件进行分析去除冗余条件
  7. 维护索引字段顺序
  8. Sparse或Dense方式,参见http://blog.csdn.net/post_yuan/article/details/79280406

以上这些都属于MDAM的能力范畴,我们将在后续文章对以上每个部分做详细介绍。下面我们通过一个对比图来比较走MDAM和走KEY ACCESS的执行计划的区别,

在这里插入图片描述

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据源的港湾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值