今天我們要來介紹索引,索引可以加速我們的查詢速度,但是同時也會降低我們除了查詢以外的效能,因此對於大型資料庫在建立索引時,必須注意索引的數量以及用途,不要建立太多不必要的索引
今天我們會針對幾個索引進行介紹,分別是:
collection.create_index([("欄位", "排序方式")])
在這個範例中,我們將使用PyMongo來建立一個升序的索引。
import pymongo
# 建立到MongoDB的連線
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 選擇要建立索引的資料庫和集合
db = client["mydatabase"]
collection = db["mycollection"]
# 使用 create_index 方法建立升序索引,索引欄位為 "name"
index_name = collection.create_index([("name", pymongo.ASCENDING)])
print(f"建立的索引名稱為: {index_name}")
# 關閉連線
client.close()
在這個範例中,我們首先建立了到MongoDB的連線,然後選擇了要建立索引的資料庫和集合。接下來,我們使用create_index
方法來建立一個升序索引,指定了索引的欄位為 "name"。
collection.create_index([("欄位", "排序方式")], unique=True)
當我們想要確保集合中的某個欄位的值是唯一的時候,可以建立一個唯一索引。唯一索引確保了在該欄位上的數據不會有重複值,從而確保了資料的一致性和完整性。
以下是如何使用PyMongo建立唯一索引的範例:
import pymongo
# 建立到MongoDB的連線
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 選擇要建立索引的資料庫和集合
db = client["mydatabase"]
collection = db["mycollection"]
# 使用 create_index 方法建立唯一索引,索引欄位為 "email"
index_name = collection.create_index([("email", pymongo.ASCENDING)], unique=True)
print(f"建立的唯一索引名稱為: {index_name}")
# 關閉連線
client.close()
在這個範例中,我們使用了unique=True
參數,來告訴MongoDB建立一個唯一索引。這個索引確保了 "email" 欄位的值在集合中是唯一的。如果有試圖插入重複值的文件,MongoDB會拒絕該操作並拋出錯誤。
唯一索引通常用於需要確保某些欄位不會有重複值的情況,例如用戶的電子郵件地址、產品的編號等等。這有助於確保資料的一致性,避免了重複或重複的值進入資料庫。
collection.create_index([("欄位", "排序方式")], partialFilterExpression={"欄位": "條件"})
Partial Index(部分索引)是 MongoDB 中的一種索引類型,它僅包含集合中符合特定條件的文件。Partial Index 可以幫助我們減少索引大小,提高查詢效能,同時確保只有特定條件的文件會被索引。
以下是如何使用 PyMongo 建立部分索引的範例:
import pymongo
# 建立到MongoDB的連線
client = pymongo.MongoClient("mongodb://localhost:27017/")
# 選擇要建立索引的資料庫和集合
db = client["mydatabase"]
collection = db["mycollection"]
# 使用 create_index 方法建立部分索引,索引欄位為 "age",僅索引 "age" 大於等於 18 歲的文件
index_name = collection.create_index([("age", pymongo.ASCENDING)], partialFilterExpression={"age": {"$gte": 18}})
print(f"建立的部分索引名稱為: {index_name}")
# 關閉連線
client.close()
在這個範例中,我們使用了 partialFilterExpression
參數,指定了部分索引的篩選條件。這個索引只會索引 "age" 大於等於 18 歲的文件。這樣,僅符合條件的文件會被索引,從而減少了索引的大小並提高了查詢效能。
部分索引特別適用於集合中包含大量文件,但僅有部分文件需要被索引的情況。這可以節省儲存空間並加快查詢速度。