MongoDB 创建索引的示范

19 min read

在 MongoDB 中,使用索引可以提高查询数据的效率和性能。创建索引可以使用 createIndex() 方法,在指定的集合上,指定一个或多个字段作为索引。下面是一个简单的示范:

  1. 连接 MongoDB 数据库
from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017/")
db = client["mydatabase"]
collection = db["mycollection"]
  1. 创建索引:
# 创建单个字段索引
collection.create_index("username")

# 创建多个字段复合索引
collection.create_index([("username", 1), ("email", -1)])

上面代码中,第一行创建了一个单个字段 username 的索引;第二行创建了一个复合索引,其中包括 usernameemail 两个字段,username 为升序索引,email 为降序索引。

  1. 查看索引

可以通过 index_information() 方法获得集合的所有索引信息:

print(collection.index_information())

输出结果:

{
    '_id_': {'key': [('_id', 1)], 'v': 2},
    'username_1': {'key': [('username', 1)], 'v': 2},
    'username_1_email_-1': {'key': [('username', 1), ('email', -1)], 'v': 2}
}

上面代码中,第一个 _id_ 是 MongoDB 默认创建的主键索引,其他两个是手动创建的索引。

  1. 使用索引查询数据

在查询数据时,可以使用 explain() 方法查看 MongoDB 的查询执行计划(execution plan),观察是否使用了索引。

query = {"username": "Alice"}
result = collection.find(query).limit(10).explain()
print(result['executionStats']['executionStages']['inputStage']['indexName'])

输出结果:

username_1

上面代码中,explain() 方法返回的结果中有一个 inputStage 字段,里面包含了执行计划的信息。其中,indexName 就是查询时使用的索引名称,如果使用了索引,该字段将显示相应的索引名称,否则为空。