我正在使用 Django 和 MySQL 运行一个网站,并且正在尝试对其进行优化。为此,我使用了 django 调试工具栏,并特别注意了 SQL 部分,我认为这是我的页面加载时间长的原因。
当我查看 django 调试工具栏中的 SQL 部分时,它说我的查询总共需要大约 90 毫秒。但是如果我在python中的渲染函数周围放了一个计时器,那么它需要超过3s(这更接近我在重新加载页面时实际看到的)......
与渲染相比,查询为何如此之快?
编辑:这是模板中的代码简化到最大:
<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>
正如你所看到的,唯一应该是昂贵的代码和平是调用对象 latest_annonces_list 时请求的 SQL 查询。但是当我用 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)