iT邦幫忙

2023 iThome 鐵人賽

DAY 24
0
Software Development

玩轉 Python 與 MongoDB系列 第 24

玩轉 Python 與 MongoDB_Day24_索引基本概念

  • 分享至 

  • xImage
  •  

今天我們要來介紹索引,索引可以加速我們的查詢速度,但是同時也會降低我們除了查詢以外的效能,因此對於大型資料庫在建立索引時,必須注意索引的數量以及用途,不要建立太多不必要的索引

今天我們會針對幾個索引進行介紹,分別是:

  • 一般索引
  • 唯一索引 unique index
  • 部分索引 partial index

一、一般索引

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"。

二、唯一索引 unique index

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會拒絕該操作並拋出錯誤。

唯一索引通常用於需要確保某些欄位不會有重複值的情況,例如用戶的電子郵件地址、產品的編號等等。這有助於確保資料的一致性,避免了重複或重複的值進入資料庫。

三、部分索引 partial index

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 歲的文件。這樣,僅符合條件的文件會被索引,從而減少了索引的大小並提高了查詢效能。

部分索引特別適用於集合中包含大量文件,但僅有部分文件需要被索引的情況。這可以節省儲存空間並加快查詢速度。


上一篇
玩轉 Python 與 MongoDB_Day23_多型與 pymongo
下一篇
玩轉 Python 與 MongoDB_Day25_超時索引 TTL Index
系列文
玩轉 Python 與 MongoDB30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言