我在postgressql陳述句中遇到了問題,在午夜和凌晨3點之間查詢時遇到了問題
select p.n, p.e,s. "name" , g. "time" , p. "date"
from l
join g on l.g_id = g.id
join p on l.p_id = p.id
join s on l.s_id = s.id
where p. "date" = current_date and p. "時間" >current_time- '3 hour'::interval
這個查詢太長了,比以前慢了4倍
。select p.n, p.e, s. "name" , g. "time" , p. "date"
from l
join g on l.g_id = g.id
join p on l.p_id = p.id
join s on l.s_id = s.id
where p. "date" p. "時間" > (current_date current_time)- '3 hour': :interval :interval
uj5u.com熱心網友回復:
因為你有一個固定的時間視窗,而且日期和時間欄位已經不同了,下面是更直接的方法。 (單表例子)
drop TABLE if exist data;
創建 表 data
(
rid integer,
adate date,
atime timeinsert into data (rid, adate, atime) values
(1, '2020-07-15'/span>, '23:59:59'/span>)。
(2, '2020-07-16', '00:00:00') 。
(3, '2020-07-16', '01:00:00') 。
(4, '2020-07-16', '03:00:00') 。
(5, '2020-07-16', '03:00:01') 。
(6, '2020-07-16'/span>, '04:00:00')
;
select rid, adate, atime from data
where adate = '2020-07-16'>and atime <= time '03:00';
uj5u.com熱心網友回復:
第一個查詢可以利用對p.date和p.time的優化,例如對p(date, time)的索引。
第二種情況不能利用這樣的索引。 它也沒有關于兩列之和的準確統計資料。
因此,執行計劃中的執行計劃。
因此,執行計劃很可能是不同的,從而解釋了性能的差異。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/324728.html
標籤:
