3
使用timestamp without time zone
類型的'made_at'列創建postgres表,ENTRIES。postgres - 估計時間戳列的索引大小
這表有兩個該列和另一列(USER_ID,外鍵)B樹索引:
btree (user_id, date_trunc('day'::text, made_at))
正如你所看到的,日期是在「天」截斷。以這種方式構建的索引的總大小爲130 MB - ENTRIES表中有4,000,000行。
問題:如果我要照顧時間到第二點,我該如何估計指數的大小?基本上,截斷時間戳在秒而不是一天(應該很容易做到,我希望)。
感謝,感謝您的答案和實例。這很有趣 - 顯然,我對數據庫索引是如何構建的知之甚少;我假設,由於樹中的葉節點會有更多的錯誤「桶」或「節點」,因此樹的總大小也會更大。你能否指出我的想法有什麼問題?謝謝! – alexakarpov
很難弄清楚你在想什麼:)。你爲什麼假設樹中會有更多的葉節點?無論列的內容如何,都有相同數量的行進行索引。 – jrs
夠公平=)我會試着解釋我的意思。我的直覺就是這樣 - 如果有1000條消息,並且全部都在同一天,那麼索引就沒用了 - 因爲顯然,所有記錄都有相同的時間戳 - 直到日期 - 所以索引不能幫助我們縮小個人記錄。他們都在同一個'桶';他們都留在同一棵樹節點上,不是嗎?例如,如果我們按小時計算,比我們有24個節點(假設合理的正態分佈),並且實際的行與較小的一排懸浮在一起=) – alexakarpov