我在 Postgres 資料庫中有兩個單獨的列用于日期和時間我在日期列和時間列中有索引。如前所述,我需要使用日期過濾器過濾資料,僅索引作業得很好。但在最近的要求中,我需要使用日期和時間過濾器來過濾資料。當我通過組合日期和時間來過濾資料時,例如 concat(date_column, ' ', time_column) ::timestamp>='{var_date_time}'日期和時間索引不起作用。獲取資料需要時間。
有什么方法可以通過結合日期和時間列來創建索引?
uj5u.com熱心網友回復:
您需要為您將在 WHERE 子句中使用的運算式創建一個索引。您不需要在文本和時間戳之間進行轉換,只需添加兩列:
where date_column time_column >= ...
需要以下索引:
create index on the_table ( (date_column time_column) );
從長遠來看,您可能需要考慮將其更改為單個列。
uj5u.com熱心網友回復:
這可能不是存盤資料的好方法。作為單個 timestamptz 列會更好。
使用現有的表和索引,您可以使用元組比較:
WHERE (date_column,time_column)>(date_constant,time_constant);
我不清楚您現有的結構是一個多列索引還是兩個單列索引。無論哪種方式,它都應該使用(其中一個)索引,但多列會更好。
uj5u.com熱心網友回復:
您最近對日期 時間的要求是替代現有的還是現有的補充。如果僅替換當前日期要求,則按照建議替換為單個列可能是最佳解決方案。但是,如果這是一個額外的要求,還有一個替代方法:添加一個時間戳作為生成的列,然后在該列上創建一個索引:
alter table <table> add ts_col timestamp generated always as (date_col time_col) stored;
create index test_ts_col_ndx on <table> (ts_col);
由于您現有的查詢和 dml 陳述句不會更改,您只需要需要日期 時間的新查詢 。(見演示)
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/516238.html
