Django と MySQL を使用して Web サイトを運営しており、最適化を試みています。その目的のために、私は django デバッグ ツールバーを使用し、SQL 部分に特に注意を払います。これが、ページの読み込みが長い理由だと思います。
django デバッグ ツールバーの SQL 部分を見ると、クエリに合計で約 90 ミリ秒かかることが示されています。しかし、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>
ご覧のとおり、コストがかかると思われる唯一のコードは、オブジェクト 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)