我有一個關于postgressql陳述句和時差的問題,
。由于時差的原因,我在午夜和凌晨3點之間查詢時遇到了問題。什么是(代碼上)最便宜的方法來解決這個問題?
我的解決方案只是花費了太多時間
0點到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/houduan/332204.html
標籤:
上一篇:如何用python給女朋友挑鉆石(seaborn畫圖入門)
下一篇:從寬到長的格式,多列到一列
