[perf-web] models.py: Use select_related to optimize values queries



commit 060ddb82b820260e7f699f087cdd5bd5eb2e5924
Author: Owen W. Taylor <otaylor fishsoup net>
Date:   Tue Jul 29 22:15:40 2014 +0200

    models.py: Use select_related to optimize values queries
    
    When we get a list of values, we want to get the metric, report,
    and target objects as well, so use select_related(). This trades
    off returning more data for each row for less queries.
    (Potentially it might make sense to select_related only for report
    and let individual queries be used for report and target.)

 metrics/models.py |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)
---
diff --git a/metrics/models.py b/metrics/models.py
index e1a7f4b..d56f660 100644
--- a/metrics/models.py
+++ b/metrics/models.py
@@ -34,7 +34,8 @@ class Value(models.Model):
         if target is not None:
             qs = qs.filter(report__target__name=target.name)
 
-        return qs.order_by('metric', 'report__target', 'report__pull_time')
+        return qs.order_by('metric', 'report__target', 'report__pull_time') \
+                 .select_related('report__target', 'metric')
 
 def resummarize():
     # We give machines a 6 hours grace period to update results
@@ -185,7 +186,8 @@ class Summary(models.Model):
         if target is not None:
             qs = qs.filter(target__name=target.name)
 
-        return qs.order_by('target', 'metric', 'time')
+        return qs.order_by('target', 'metric', 'time') \
+                 .select_related('report__target', 'metric')
 
 class SummaryHour6(Summary):
     @staticmethod


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]