SequoiaiDB巨杉数据库-基于代价的访问计划评估

当查询的集合有多个索引时,SequoiaDB 需要选取合适的索引,或者全表扫描来执行查询。数据节点上的查询优化器会基于代价对候选的访问计划进行评估,选取合适的访问计划来完成查询。

估算出每个候选访问计划执行的以下指标:

  1. 基于规则的估算选取候选访问计划

    1. 索引的选择率 < 0.1(即索引过滤剩下的记录个数为集合记录个数的 10%)
    2. 索引完全匹配排序字段及排序方向
    3. 全表扫描
  2. 符合指标 1 的候选访问计划,再基于代价的进行估算,最终选出总代价最小的访问计划执行查询。

示例

集合 sample.employee 上的有索引:

  1. "index_a" : { a : 1 }
  2. "index_b" : { b : 1 }
  3. "index_c" : { c : 1 }

查询 db.sample.employee.find( { a : 1, b : 2 } ).sort( { c : 1 } ) 可以有以下的访问计划:

  1. IXSCAN( "index_a" ) ==> SORT( { c : 1 } )
  2. IXSCAN( "index_b" ) ==> SORT( { c : 1 } )
  3. IXSCAN( "index_c" )
  4. TBSCAN() ==> SORT( { c : 1 } )

根据指标 1 可以确定 4 个都是候选的访问计划,其中访问计划 1 和 2 满足指标 1.1,访问计划 3 满足指标 1.2,访问计划 4 满足指标 1.3。

然后通过代价估算确定总代价最小的访问计划,并选取执行查询。假设估算出 4 个候选访问计划的总代价分别为 1000,800,12000 和 1000,则最终选择访问计划 2 执行查询。

更多信息请访问巨杉数据库官网​​​​​​​

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值