第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在具有 60 個功能的 1000 萬行數(shù)據(jù)庫上加速 Django 查詢聚合?

如何在具有 60 個功能的 1000 萬行數(shù)據(jù)庫上加速 Django 查詢聚合?

慕碼人8056858 2021-11-09 15:42:16
我在 psql 中有一個數(shù)據(jù)庫表,其中包含 10,000,000 行和 60 列(功能)。我定義了一個 Django 查詢集,如下所示:MyQ=MyDataBase.objects.filter(Name='Mike', date=date(2018, 2, 11), Class='03')只有 5 行滿足上述過濾條件。但是當(dāng)我嘗試類似的東西時MyQ.count() #which equals 5或者MyQ.aggregate(Sum('Score'))['Score__sum'] #which equals 61每個大約需要 3 分鐘給我結(jié)果。這不是很奇怪嗎?查詢集不應(yīng)該只關(guān)注我們告訴他們關(guān)注的行,從而使生活更輕松嗎?計數(shù) 5 行或?qū)ζ渲幸粋€字段求和不能花費那么長時間。我究竟做錯了什么?我也應(yīng)該這樣說。我第一次在這張桌子上嘗試這段代碼時,一切都很好,可能需要 1 秒才能捕捉到結(jié)果,但現(xiàn)在 3 分鐘真的很煩人。從那時起,我沒有更改數(shù)據(jù)庫或代碼中的任何內(nèi)容。
查看完整描述

1 回答

?
米脂

TA貢獻1836條經(jīng)驗 獲得超3個贊

通常,如果您根據(jù)特定字段或字段數(shù)量過濾表,則應(yīng)在這些字段上創(chuàng)建索引。它允許數(shù)據(jù)庫查詢規(guī)劃器在搜索/排序時采用更優(yōu)化的路徑。

看起來您在問題中使用了 Postgres,因此您可以SELECT * FROM pg_indexes WHERE tablename = 'yourtable';在 psql 中運行以查看任何現(xiàn)有索引。

Django 可以在您的模型定義中為您創(chuàng)建這些索引。例如,您的模型MyDatabase可能如下所示:

class MyDatabase(models.Model):
    name = models.TextField(index=True)
    date = models.DateField(index=True)   
    class = models.TextField(index=True)

這里有更多關(guān)于在 Django 模型上創(chuàng)建索引的閱讀:gun.io/blog/learn-indexing-dammit


查看完整回答
反對 回復(fù) 2021-11-09
  • 1 回答
  • 0 關(guān)注
  • 205 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號