0
我使用的是PostgreSQL 9.2.8。通過時間戳檢索數據的最有效方法
我有表所示:
CREATE TABLE foo
(
foo_date timestamp without time zone NOT NULL,
-- other columns, constraints
)
此表包含約4,000,000行。有一天數據大約有50,000行。
我的目標是儘快檢索一天的數據。
我創建了一個索引,如:
CREATE INDEX foo_foo_date_idx
ON foo
USING btree
(date_trunc('day'::text, foo_date));
而現在這個樣子,我選擇數據(now()
僅僅是一個例子,我需要的任何一天的數據):
select *
from process
where date_trunc('day'::text, now()) = date_trunc('day'::text, foo_date)
這查詢持續約20秒。
是否有可能在更短的時間內獲得相同的數據?
你的表是否有主鍵?是'foo_date'的一部分嗎? (IMO foo_date至少應該是foos候選鍵之一的一部分) – joop
@joop foo包含主鍵 - 簡單的'bigint' id。 'foo_date'不是它的一部分 – ilovkatie
您是否檢索這些數據並將其顯示在屏幕上?通過網絡連接獲得50,000行需要花費時間,因爲用戶界面顯示這些行。這可能不是服務器檢索這些行的問題,但瓶頸可能在其他地方。我不知道PostgreSQL工具足夠好,可以指出你可以檢查的地方,但也許別人可以。 –