我創建的網站有「事件」。活動有一個標題,日期和相關人員的用戶名。一個事件可以是任何事情,從追隨某人,創建一個新的職位,等等。我正在考慮將所有事件存儲在一張表中,但我可以很快看到它變得非常大。龐大的PostgreSQL表的可能的性能問題
我在做對吧?當我需要搜索與某個用戶有關的事件時,系統上的通行費有多糟糕?我可以以某種方式優化它嗎?
我創建的網站有「事件」。活動有一個標題,日期和相關人員的用戶名。一個事件可以是任何事情,從追隨某人,創建一個新的職位,等等。我正在考慮將所有事件存儲在一張表中,但我可以很快看到它變得非常大。龐大的PostgreSQL表的可能的性能問題
我在做對吧?當我需要搜索與某個用戶有關的事件時,系統上的通行費有多糟糕?我可以以某種方式優化它嗎?
您可以在WHERE子句中最經常使用的列上添加索引,例如,如果您經常選擇與某個用戶有關的所有事件,則應該在user_id列上創建一個索引。
http://www.postgresql.org/docs/9.1/static/sql-createindex.html
只要在該表中的數據是normalized,你應該確定。如果您發現該表上的讀取查詢速度變慢,則可以向某些列添加索引,但是您應該記住這會減慢對該表的寫入速度。
如果發現性能太慢,你可以切換到使用一些NoSQL數據庫是更好的大型表進行了優化。
如果表將是非常大的,你可以使用分區: http://www.postgresql.org/docs/9.1/static/ddl-partitioning.html ,但你必須選擇一個好的分區鍵 - 良好的候選人是:
這可能不是一個好主意。如果表經歷了很多寫操作(看起來像是這樣),那麼添加索引實際上可能會降低整個系統的速度! – Oleksi