SequoiaDB 巨杉数据库-使用索引查询

一般地,SequoiaDB 会自动生成访问计划决定查询是否使用索引扫描,以及使用哪个索引去扫描。如果需要指定索引来进行查询,可以使用SdbQuery.hint()接口完成。如,在 sample.employee 集合上指定 idIdx 索引来查询 id 为 999 的记录。

db.sample.employee.find({ 'id': 999 }).hint({ '': 'idIdx' })

如需查看索引使用情况,可以使用 SdbQuery.explain()。ScanType 字段为 ixscan 说明使用了索引,否则,ScanType 为 tbscan。在 IndexName 字段中可以查看所使用的是哪个索引。

> db.sample.employee.find({ 'id': 999 }).explain()
{
  "NodeName": "sdbserver:11740",
  "GroupName": "group1",
  "Role": "data",
  "Name": "sample.employee",
  "ScanType": "ixscan",
  "IndexName": "idIdx",
  "UseExtSort": false,
  "Query": {
    "$and": []
  },
  "IXBound": {
    "_id": [
      [
        {
          "$minElement": 1
        },
        {
          "$maxElement": 1
        }
      ]
    ]
  },
  "NeedMatch": false,
  "ReturnNum": 0,
  "ElapsedTime": 0.000052,
  "IndexRead": 0,
  "DataRead": 0,
  "UserCPU": 0,
  "SysCPU": 0
}

 

访问计划使用索引的决策决定于集合的统计信息。分析集合和索引的数据,有助于生成更高效的访问计划。收集统计信息请使用Sdb.analyze()

删除索引

如需删除无用的索引,可以参考SdbCollection.dropIndex()接口。例如,删除集合 sample.employee 中名为 idIdx 的索引:

db.sample.employee.dropIndex('idIdx')

基本原理

创建索引时,数据库会将指定字段的值拷贝到一个数据结构索引项中,并对其进行排序。使用索引查询时,数据库会从索引中找到满足条件的索引项,然后根据索引项中记录的位置信息,找到完整的记录。从而实现高效的查询。索引项是以 B 树的形式组织的,因此使用树的遍历可以快速地找到满足条件的索引项。

图 1 中,对集合中的 id 字段建立了索引。查询 id = 5 的记录。流程如红色线所示。

 

avatar

 

该查询分为以下几个步骤:

  • 找到 id 字段对应的索引
  • 在索引中,通过遍历 B 树的方式,找到符合条件的索引项
  • 通过索引项中记录的位置信息,找到完整的记录,并返回
  • 查询完成

 

相关阅读

SequoiaDB 巨杉数据库-索引

SequoiaDB 巨杉数据库-数据模型

SequoiaDB 巨杉数据库-事务自动回滚

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值