盡量不查物件,能用values()
select_related('classes') 連表查詢 多對一 一對一
prefetch_related('classes') 子查詢 多對一 多對多
only('name') 指定某些字段 defer 指定排除某些字段
queryset 特性
- only
- defer
- seleted_related
- prefetch_related
classdepart(models.model): 5個部門
title =models.charfield(...)
class
user(models.model): 10個使用者
name =models.charfield(...)
email =models.charfield(...)
dp = models.fk(depart)
比較low的方法 —— 11次單錶查詢
result =user.objects.all()for item in
result:
print(item.name,item.dp.title)
selected_related方法
—— 只支援~onetoone與foreignkey
—— 主動做連表查詢(1次連表查詢相當於2次單錶查詢)
result = user.objects.all().seleted_related('dp')for item in
result:
print(item.name,item.dp.title)
—— 問題:如果鍊錶多,效能越來越差。——但是一般情況下表不會連的特別多!
prefetch_related方法
—— 除了外來鍵與一對一關係還支援多對多!
—— 子查詢《多次單錶查詢》(2次單錶查詢 )
#select * from user ;
#通過python**獲取:dp_id = [1,2]
#select * from depart where id in dp_id —— 只找相關的depresult = user.objects.all().prefetch_related('dp'
)for item in
result:
print(item.name,item.dp.title)
—— 注意:1次單錶查詢要比1次連表查詢效率高。
—— 為什麼要用foreignkey?
1、不使用fk的話,浪費硬碟!使用fk可以節省硬碟空間
2、但是同時降低了查詢速度,因為連表操作的效率要低於單錶的操作
3、進行字段約束
4、但是業務的資料量大的話,不會使用fk,為了讓使用者體驗好,查詢速度快,放在一張表中——單錶查詢快。
ORM 效能相關
orm效能相關 1.all users models.user.objects.all values name age role name 2.物件 all users models.user.objects.all 用的時候注意,只拿自己表中的字段,別跨表 3.select related 外來鍵...
sqlalchemy系列 2 orm相關簡易操作
sqlalchemy中的orm讓我們可以很方便的採用類似python物件的方式去運算元據庫,非常的方便實現增刪改查的各種功能,下面一一陳述 值得一說的是,sqlalchemy中的物件分為四種狀態 transient 短暫的,主要指記憶體中的物件 pending 掛起的,這樣的物件準備插入資料庫,等執...
IO效能相關
網絡卡效能優化方案 繫結中斷 至特定cpu 減少介面屬性設定 資料報打入cpu標籤,提公升快取命中 磁碟隨機讀寫優化方案 批量讀寫 尋道更快 轉速更高的硬碟 記憶體作為快取 ssdraid 磁碟順序讀寫優化方案 raid ssdiops 每秒執行的io次數 bw 頻寬,每秒的吞吐量 lat 每次io...