我正在用Django和MySQL運行一個網站,我試圖優化它。 爲此,我使用django調試工具欄,並特別關注SQL部分,我認爲這是我的頁面負載很長的原因。Django快速查詢,但渲染速度慢
當我查看django調試工具欄中的SQL部分時,它說我的查詢總共需要大約90ms。 但是,如果我把一個計時器周圍的python渲染功能,然後它需要超過3秒(這是更接近我實際看到時,重新加載頁面)...
如何查詢是快速相比渲染?
編輯:這裏是模板的代碼簡化到最大:
<div id="content_annonces" class="ui-widget ui-corner-all">
<table>
{% if latest_annonces_list %}
here goes the content
{% else %}
nothing found
{% endif %}
</table>
</div>
,你可以看到,那被認爲是昂貴的代碼的唯一和平是調用該對象時所要求的SQL查詢latest_annonces_list。 但是,當我使用Django調試工具欄配置它,它說,這個查詢所經過的90毫秒,而呈現大約需要3秒......
而且這裏去的latest_annonces_list內容:
result = Annonce.objects.select_related('vehicule', 'vehicule__marque')
.filter(vehicule__marque__in=self.marques).order_by('prix')[:10]
模型在這裏:
class Marque(models.Model):
name = models.CharField(db_index=True, primary_key=True, max_length=100)
class Vehicule(models.Model):
modele = models.CharField(primary_key=True, db_index=True, max_length=100)
gen_modele = models.CharField(db_index=True, max_length=100)
marque = models.ForeignKey(Marque)
categories = models.ManyToManyField(Categorie)
click = models.PositiveIntegerField(default=0)
class Annonce(models.Model):
vehicule = models.ForeignKey(Vehicule, db_index=True)
porte = models.ForeignKey(Porte, db_index=True)
carburant = models.ForeignKey(Carburant, db_index=True)
bv = models.ForeignKey(Boite, db_index=True)
prix = models.DecimalField(db_index=True,max_digits=8, decimal_places=2)
km = models.PositiveIntegerField(db_index=True)
dpt = models.CharField(db_index=True, max_length=50)
annonceur = models.ForeignKey(Annonceur, db_index=True)
img = models.URLField()
url = models.URLField(max_length=2000)
finition = models.CharField(max_length=500)
cylindree = models.CharField(max_length=500)
moteur = models.CharField(max_length=500)
annee = models.DateTimeField(u'annee vehicule', db_index=True)
pub_date = models.DateTimeField(u'date publication')
last_touched = models.DateTimeField(u'derniere modification')
last_scan = models.DateTimeField(u'dernier scan')
type_ann = models.ForeignKey(Type_Annonce, db_index=True)
type_vendeur = models.ForeignKey(Vendeu
R,db_index = TRUE)
船長在這裏明顯的最快方法 - 也許你有低效的代碼在你的渲染邏輯? – Rogach
嗯,我想到了它,但在模板中可能是低效的唯一的事情是查詢相關...其餘的只是由字符串組成...... – EagleOne
好吧,我只是在開玩笑。問題是我們無法看到代碼就說這個問題。你能提供一個你的問題的小例子嗎? – Rogach