计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
弹性伸缩 AS
镜像服务 IMS
专属主机 DeH
函数工作流 FunctionGraph
云手机服务器 CPH
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
虚拟专用网络 VPN
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
VPC终端节点 VPCEP
云连接 CC
企业路由器 ER
企业交换机 ESW
全球加速 GA
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
边缘安全 EdgeSec
威胁检测服务 MTD
CDN与智能边缘
内容分发网络 CDN
CloudPond云服务
智能边缘云 IEC
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
云搜索服务 CSS
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
数据可视化 DLV
数据湖工厂 DLF
湖仓构建 LakeFormation
企业应用
云桌面 Workspace
应用与数据集成平台 ROMA Connect
云解析服务 DNS
专属云
专属计算集群 DCC
IoT物联网
IoT物联网
设备接入 IoTDA
智能边缘平台 IEF
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
国际站常见问题
ICP备案
我的凭证
支持计划
客户运营能力
合作伙伴支持计划
专业服务
区块链
区块链服务 BCS
Web3节点引擎服务 NES
解决方案
SAP
高性能计算 HPC
视频
视频直播 Live
视频点播 VOD
媒体处理 MPC
实时音视频 SparkRTC
数字内容生产线 MetaStudio
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
存储容灾服务 SDRS
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
专属分布式存储服务 DSS
容器
云容器引擎 CCE
容器镜像服务 SWR
应用服务网格 ASM
华为云UCS
云容器实例 CCI
管理与监管
云监控服务 CES
统一身份认证服务 IAM
资源编排服务 RFS
云审计服务 CTS
标签管理服务 TMS
云日志服务 LTS
配置审计 Config
资源访问管理 RAM
消息通知服务 SMN
应用运维管理 AOM
应用性能管理 APM
组织 Organizations
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
应用身份管理服务 OneAccess
数据库
云数据库 RDS
文档数据库服务 DDS
数据管理服务 DAS
数据复制服务 DRS
云数据库 GeminiDB
云数据库 GaussDB
分布式数据库中间件 DDM
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
人脸识别服务 FRS
图引擎服务 GES
图像识别 Image
内容审核 Moderation
文字识别 OCR
AI开发平台ModelArts
图像搜索 ImageSearch
对话机器人服务 CBS
华为HiLens
视频智能分析服务 VIAS
语音交互服务 SIS
应用中间件
分布式缓存服务 DCS
API网关 APIG
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
多活高可用服务 MAS
事件网格 EG
企业协同
华为云会议 Meeting
云通信
消息&短信 MSGSMS
云生态
合作伙伴中心
云商店
开发者工具
SDK开发指南
API签名指南
Terraform
华为云命令行工具服务 KooCLI
其他
产品价格详情
系统权限
管理控制台
客户关联华为云合作伙伴须知
消息中心
公共问题
开发与运维
应用管理与运维平台 ServiceStage
软件开发生产线 CodeArts
需求管理 CodeArts Req
部署 CodeArts Deploy
性能测试 CodeArts PerfTest
编译构建 CodeArts Build
流水线 CodeArts Pipeline
制品仓库 CodeArts Artifact
测试计划 CodeArts TestPlan
代码检查 CodeArts Check
代码托管 CodeArts Repo
云应用引擎 CAE
开天aPaaS
云消息服务 KooMessage
云手机服务 KooPhone
云空间服务 KooDrive

创建和管理索引

更新时间:2024-05-13 GMT+08:00

DDS支持利用索引实现高效查询。如果没有索引,DDS必须执行集合扫描,即扫描集合中的每个文档,以选择那些与查询语句匹配的文档。如果一个查询存在适当的索引,DDS可以使用该索引来限制它必须检查的文档数量。

索引分类

索引分类

说明

默认索引

在创建集合期间,DDS在_id字段上创建唯一索引。该索引可防止客户端插入两个具有相同值的文档。你不能将_id字段上的index删除。

在分片群集中,如果您不使用_id字段作为分片键,应用程序需要确保_id字段中值的唯一性以防止错误。这通常是通过使用标准的自动生成的ObjectId来完成的。

单字段索引

除DDS定义的_id索引外,DDS还支持在文档的单个字段上创建用户定义的升序/降序索引。

对于单字段索引和排序操作,索引键的排序顺序(升序或降序)并不重要,因为DDS可以从任何方向遍历索引。

复合索引

DDS还支持多个字段上的用户定义索引,即复合索引。

复合索引中列出的字段的顺序具有重要意义。例如,如果一个复合索引由{userid: 1, score: -1}组成,索引首先按userid排序,然后在每个userid值内按score排序。

对于复合索引和排序操作,索引键的排序顺序(升序或降序)可以决定索引是否支持排序操作。

多键索引

DDS使用多键索引来索引存储在数组中的内容。如果索引包含数组值的字段,DDS为数组的每个元素创建单独的索引项。这些多键索引允许查询通过匹配数组的一个或多个元素来选择包含数组的文档。DDS自动决定是否创建一个多键索引,如果索引字段包含数组值,您不需要显式地指定多键类型。

索引名称

索引的默认名称是索引键和索引中每个键的方向(即1或-1)的连接,使用下划线作为分隔符。例如,在{ item : 1, quantity: -1 }上创建的索引名称为item1_quantity-1

您可以创建具有自定义名称的索引,比如比默认名称更易于阅读的索引。例如,考虑一个经常查询products集合以填充现有库存数据的应用程序。下面的createIndex() 方法在名为查询的商品和数量上创建一个索引:

db.products.createIndex( { item: 1, quantity: -1 } , { name: "query for inventory" })

您可以使用db.collection.getIndexes()方法查看索引名称。一旦创建索引,您将无法重命名。相反,您必须删除并使用新名称重新创建索引。

DDS提供了许多不同的索引类型来支持特定类型的数据和查询。

创建索引

  1. DDS使用如下命令创建索引:

    db.collection.createIndex(keys, options)

    • key 值为你要创建的索引字段,1 为指定按升序创建索引,-1代表降序创建索引。
    • options接收可选参数,常用可选参数列表如下:

      Parameter

      Type

      Description

      background

      Boolean

      默认值为false。

      建索引过程会阻塞其它数据库操作,background可指定以后台方式创建索引。

      unique

      Boolean

      默认值为false

      建立的索引是否唯一。指定为true创建唯一索引。

      name

      string

      索引的名称。如果未指定,MongoDB的通过连接索引的字段名和排序顺序生成一个索引名称。

      expireAfterSeconds

      integer

      指定一个以秒为单位的数值,完成 TTL设定,设定集合的生存时间。

  2. 创建索引。

    • 单字段索引(Single Field Index)

      db.user.createIndex({"name": 1})

      上述语句针对name创建了单字段索引,其能加速对name字段的各种查询请求,是最常见的索引形式,DDS默认创建的id索引也是这种类型,{"name": 1} 代表升序索引,也可以通过{"name": -1}来指定降序索引,对于单字段索引,升序/降序效果是一样的。

    • 复合索引(Compound Index)

      复合索引是单子索引的升级版本,它针对多个字段联合创建索引,先按第一个字段排序,第一个字段相同的文档按第二个字段排序,依次类推。

      db.user.createIndex({"name": 1, "age": 1} )

    • 多键索引
      • 当索引的字段为数组时,创建出的索引称为多键索引。
      • 多键索引会为数组的每个元素建立一条索引。

      如果为user集合加入一个habit字段(数组)用于描述兴趣爱好,需要查询有相同兴趣爱好的人就可以利用habit字段的多键索引。

      {“name” : “jack”, “age” : 19, habit: [“football, runnning”]} //这是person表的一条用户信息。

      db.user.createIndex( {"habit": 1} ) //自动创建多key索引

      db.user.find( {"habit": "football"} ) //查询有相同兴趣爱好的人

  3. 查看集合索引。

    db.user.getIndexes()

  4. 删除集合所有索引。

    db.user.dropIndexes()

  5. 删除集合指定索引。如下方式删除user集合中"name"索引。

    db.user.dropIndex({"name": 1})

注意事项

DDS除了支持多种不同类型的索引,还能对索引定制一些特殊的属性。

  • 唯一索引(unique index):保证索引对应的字段不会出现相同的值,比如_id索引就是唯一索引。
  • TTL索引:可以针对某个时间字段,指定文档的过期时间(经过指定时间后过期 或 在某个时间点过期)。
  • 部分索引(partial index): 只针对符合某个特定条件的文档建立索引。
  • 稀疏索引(sparse index): 只针对存在索引字段的文档建立索引,可看做是部分索引的一种特殊情况。

我们使用cookie来确保您的高速浏览体验。继续浏览本站,即表示您同意我们使用cookie。 详情

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容