注目の運用パフォーマンスの点を強化ORM
最適化1:オブジェクト、使用値をチェックしないようにしてください値を使用することです
オブジェクトクエリを使用しての直接の結果は、5 SQL文です
デフyouhua(リクエスト): #使用对象查 obj_list = models.Book.objects.all() のための OBJ でobj_list: プリント(obj.title、obj.pubs.name) リターン(要求、レンダリング" youhua.htmlを")
唯一のSQLを実行されたクエリを使用する値を、自動的に接続テーブルのクエリ
DEF youhua(リクエスト): #使用値は obj_list = models.Book.objects.values(' タイトル'、' pubs__name ' ) のための OBJ にobj_list: プリント(OBJ [ ' タイトル' ]、OBJ [ ' pubs__name ' ]) 戻りレンダリング(リクエスト、" youhua.html ")
最適化2:select_related( 'クラス')
使用select_related( 'クラス')
適用されます:多対一のものには、(select_relatedを追加クエリ)カッコ内の方法は、外部キーフィールドです。それも、テーブル、クエリになります
デフyouhua(リクエスト): #使用对象查 obj_list = models.Book.objects.all()(select_related。' パブ' ) のための OBJの中でobj_list: プリント(obj.title、obj.pubs.name) リターンは、(リクエストをレンダリング" youhua.html ")
最適化3:prefetch_related()
使用すると、1に多く、)(prefetch_related
デフyouhua(リクエスト): obj_list = models.Book.objects.all()(prefetch_related。" パブ" ) のための OBJの中でobj_list: プリント(obj.title、obj.pubs.name) リターンは、(リクエストをレンダリング」youhua.htmlを")
使用すると、多くの人にとって、()多くをprefetch_related
デフyouhua(リクエスト): obj_list = models.Book.objects.all() のための OBJ でobj_list: プリント(obj.title、obj.authors.all()) リターンがレンダリング(リクエスト、" youhua.html ")
デフyouhua(リクエスト): obj_list = models.Book.objects.all()prefetch_related(。" 作者" ) のための OBJ でobj_list: プリント(obj.title、obj.authors.all()) のリターンは、(リクエストをレンダリング」youhuaを.htmlを」)
四つの最適化:のみ()クエリのフィールドを指定します
直接クエリの場合は、すべてのフィールドをチェックします
デフyouhua(リクエスト): obj_list = models.Book.objects.all() のための OBJ でobj_list: プリント(obj.title) リターンレンダリング(リクエスト、" youhua.html ")
クエリクエリ指定された一部のフィールドは、使用のみ指定したフィールドは、フィールド私たちに必要なことが判明します。
デフyouhua(リクエスト): obj_list = models.Book.objects.all()のみ(。' タイトル' ) のための OBJ でobj_list: プリント(obj.title) リターンがレンダリング(リクエスト、" youhua.html ")
最適化5:延期()特定のフィールドの反対だけクエリの除外を指定します
我々はより多く必要とする分野は、劣らず、延期を除外するために使用できない場合
デフyouhua(リクエスト): obj_list = models.Book.objects.all()延期(。' タイトル' ) のための OBJ でobj_list: プリント(obj.pubtime) リターンがレンダリング(リクエスト、" youhua.html ")
注:あなたがフィールドを除外するだけでなく、クエリは、もちろん、負担が増加しますチェックすると、指定したフィールドの外クエリフィールドがクエリの負担が増加します。