MongoDB 索引
在 MongoDB 中,索引是提高查询效率的关键工具。没有索引时,MongoDB 需要扫描集合中的每个文档来选择匹配查询语句的文档,这种全扫描非常低效,尤其是当数据量很大时。索引通过存储数据集中一小部分数据的易遍历结构,极大地提高了查询性能。接下来,就让我们一起学习如何在 MongoDB 中创建和管理索引吧!
创建索引
使用 createIndex()
方法
你可以使用 createIndex()
方法来创建索引。这个方法接受一个文档作为参数,该文档指定了要索引的字段及其排序顺序(升序或降序)。
语法:
db.COLLECTION_NAME.createIndex({KEY: 1})
KEY
:要索引的字段名称。1
:表示按升序排序。如果需要按降序排序,使用-1
。
示例:
假设你有一个名为 mycol
的集合,你可以按 title
字段创建升序索引:
> db.mycol.createIndex({"title": 1})
{
"createdCollectionAutomatically" : false,
"numIndexesBefore" : 1,
"numIndexesAfter" : 2,
"ok" : 1
}
你也可以为多个字段创建复合索引:
> db.mycol.createIndex({"title": 1, "description": -1})
索引选项
createIndex()
方法还接受一些可选参数,例如:
background
:在后台构建索引,避免阻塞其他数据库活动。默认值为false
。unique
:创建唯一索引,确保索引字段的值唯一。默认值为false
。name
:索引的名称。如果不指定,MongoDB 会自动生成。sparse
:如果为true
,索引只引用包含指定字段的文档。默认值为false
。expireAfterSeconds
:设置 TTL(生存时间),控制文档在集合中的保留时间。weights
:用于文本索引,指定字段的权重。default_language
:指定文本索引的语言,默认为英语。language_override
:指定文档中包含的语言字段名称。
删除索引
使用 dropIndex()
方法
你可以使用 dropIndex()
方法删除特定的索引。
语法:
db.COLLECTION_NAME.dropIndex({KEY: 1})
或者直接指定索引名称:
db.COLLECTION_NAME.dropIndex("name_of_the_index")
示例:
> db.mycol.dropIndex({"title": 1})
{
"ok" : 0,
"errmsg" : "can't find index with key: { title: 1.0 }",
"code" : 27,
"codeName" : "IndexNotFound"
}
使用 dropIndexes()
方法
你可以使用 dropIndexes()
方法删除集合中的所有索引。
语法:
db.COLLECTION_NAME.dropIndexes()
示例:
> db.mycol.dropIndexes()
{ "nIndexesWas" : 2, "ok" : 1 }