Django4.0 數(shù)據(jù)庫(kù)訪(fǎng)問(wèn)優(yōu)化-使用唯一索引列來(lái)檢索單個(gè)對(duì)象

2022-03-16 18:02 更新

當(dāng)使用 ?unique()? 或 ?db_index? 的列來(lái)檢索單個(gè)對(duì)象時(shí),有兩個(gè)原因。首先,由于底層數(shù)據(jù)庫(kù)索引的存在,查詢(xún)的速度會(huì)更快。另外,如果多個(gè)對(duì)象與查找對(duì)象相匹配,查詢(xún)的運(yùn)行速度可能會(huì)慢很多;在列上有一個(gè)唯一約束保證這種情況永遠(yuǎn)不會(huì)發(fā)生。

例如:

>>> entry = Entry.objects.get(id=10)

會(huì)比以下更快:

>>> entry = Entry.objects.get(headline="News Item Title")

因?yàn)??id ?通過(guò)數(shù)據(jù)庫(kù)索引,并且保證是唯一的。
執(zhí)行以下操作可能非常慢:

>>> entry = Entry.objects.get(headline__startswith="News")

首先,?headline ?沒(méi)有被索引,這將使得底層數(shù)據(jù)庫(kù)獲取變慢。

其次,查找不保證只返回一個(gè)對(duì)象。如果查詢(xún)匹配多于一個(gè)對(duì)象,它將從數(shù)據(jù)庫(kù)中檢索并傳遞所有對(duì)象。如果數(shù)據(jù)庫(kù)位于單獨(dú)的服務(wù)器上,那這個(gè)損失將更復(fù)雜,網(wǎng)絡(luò)開(kāi)銷(xiāo)和延遲也是一個(gè)因素。


以上內(nèi)容是否對(duì)您有幫助:
在線(xiàn)筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)