前言
Django數據層提供各種途徑優化數據的訪問,一個項目大量優化工作一般是放在后期來做,早期的優化是“萬惡之源”,這是前人總結的經驗,不無道理。如果事先理解Django的優化技巧,開發過程中稍稍留意,后期會省不少的工作量。
現在有一張記錄用戶信息的UserInfo數據表,表中記錄了10個用戶的姓名,呢稱,年齡,工作等信息.
models文件
from django.db import models class Job(models.Model): title=models.CharField(max_length=32) class UserInfo(models.Model): username=models.CharField(max_length=32) nickname=models.CharField(max_length=32) job=models.ForeignKey(to="Job",to_field="id",null=True)
數據表中記錄:

另一張數據表記錄用戶工作的Job表,關聯用戶的工作字段.

要查出每個用戶的用戶名,呢稱和工作等信息
def index(request): user_list=models.UserInfo.objects.all() print(user_list.query) # 打印查詢時使用的語句 print(type(user_list)) # 打印查詢結果的數據類型 for user in user_list: print("%s-->%s-->%s" %(user.username,user.nickname,user.job.title)) return render(request,'index.html')打印信息:
SELECT "app01_userinfo"."id", "app01_userinfo"."username", "app01_userinfo"."nickname", "app01_userinfo"."job_id" FROM "app01_userinfo"<class 'django.db.models.query.QuerySet'>user1-->user1-->pythonuser2-->user2-->linuxuser3-->user3-->golanguser4-->user4-->pythonuser5-->user5-->linuxuser6-->user6-->golanguser7-->user7-->pythonuser8-->user8-->linuxuser9-->user9-->golanguser10-->user10-->linux
在服務端進行這些操作,這些查詢語句的性能是很低的,遍歷取出這10個用戶的姓名,呢稱,工作等信息要在兩張數據庫中執行11次查詢操作.
首先只從UserInfo表中查出所有的用戶記錄,需要執行一次查詢操作.
查詢Job數據表,每循環一次用戶信息的列表,都需要從Job表中查詢一次用戶的工作信息.
數據表中總共記錄了10條用戶記錄,所以還需要循環10次才能從Job表中查詢完成所有用戶的工作信息.所以一共需要執行11次數據庫查詢操作.
那有沒有什么好的方法能夠提高數據庫查詢的效率呢???
def index(request): user_list=models.UserInfo.objects.values("username","nickname","job") print(user_list.query) # 打印查詢時使用的語句 print(type(user_list)) # 打印查詢結果的數據類型 print("user_list:",user_list) for user in user_list: print(user["username"], user["nickname"], user["job"]) return render(request,'index.html')
新聞熱點
疑難解答