select count(*)
FROM flight_info f
INNER JOIN spa_plan p
ON f.dest_code=p.depAirportCode
WHERE f.area_type='D'
and (to_date(p.timeseries||' '||p.Deptime,'YYYY/MM/DD HH24mi')- (case when f.arrival_time < f.takeoff_time then to_date(f.flight_date||' '||substr(f.arrival_time,1,2)||':'||substr(f.arrival_time,3,2)||':00','yyyy-MM-dd HH24:mi:ss')+1 else to_date(f.flight_date||' '||substr(f.arrival_time,1,2)||':'||substr(f.arrival_time,3,2)||':00','yyyy-MM-dd HH24:mi:ss')end ) )* 24>=3;
加上最后時間大于3天 就不走索引兩個表都走全表掃描 查詢18秒
uj5u.com熱心網友回復:
這么復雜的過濾運算式,怎么能走到普通索引,要么修改條件,要么創建那么復雜的函式索引,前提還需要符合這個條件的資料量比較少。uj5u.com熱心網友回復:
條件怎么修改好點
uj5u.com熱心網友回復:
看到這個sql第一時間想到的就是 把 If you dont leave me. I will by your side until the life end 翻譯成"你不離開我,我就跟你同歸于盡"。查個3天的資料,條件搞那么復雜?select count(*)
FROM flight_info f
INNER JOIN spa_plan p
ON f.dest_code = p.depAirportCode
WHERE f.area_type = 'D'
and p.timeseries >= to_char(sysdate-3, 'yyyy/mm/dd')
and p.timeseries < to_char(sysdate+1, 'yyyy/mm/dd')
不一定符合你的要求,但是你sql要往這個思路上靠。
uj5u.com熱心網友回復:
在不改變現有的表結果基礎上,這個陳述句很難優化。怎么會有這么燒腦的設計啊。至少,要把年月日和時分秒放到一個欄位里啊。uj5u.com熱心網友回復:
我太難了
uj5u.com熱心網友回復:
貼一下執行計劃吧,查詢條件是用不到索引的。uj5u.com熱心網友回復:
查詢計劃 走的是全表掃描
uj5u.com熱心網友回復:
CREATE INDEX idx_n1 ON spa_plan(to_date(p.timeseries || ' ' || p.Deptime, 'YYYY/MM/DD HH24mi')) ;SELECT/*+use_concat*/ COUNT(*)
FROM flight_info f
INNER JOIN spa_plan p
ON f.dest_code = p.depAirportCode
WHERE f.area_type = 'D'
AND ((f.arrival_time < f.takeoff_time AND
to_date(p.timeseries || ' ' || p.Deptime, 'YYYY/MM/DD HH24mi') =
to_date(f.flight_date || ' ' || substr(f.arrival_time, 1, 2) || ':' ||
substr(f.arrival_time, 3, 2) || ':00',
'yyyy-MM-dd HH24:mi:ss') + 1 + 3 / 24) OR
(f.arrival_time >= f.takeoff_time AND
to_date(p.timeseries || ' ' || p.Deptime, 'YYYY/MM/DD HH24mi') =
to_date(f.flight_date || ' ' || substr(f.arrival_time, 1, 2) || ':' ||
substr(f.arrival_time, 3, 2) || ':00',
'yyyy-MM-dd HH24:mi:ss') + 3 / 24));
沒看具體資料量,如果你想走索引 猜想F表很小,走全表,再驅動P表,反過來也可以,試試吧
uj5u.com熱心網友回復:
如果是winForm 可以先用SQL抓3天資料,細節用前臺過濾條件來過濾。這樣速度會快一點
uj5u.com熱心網友回復:
不是等于,應該大于等于,就好慢
uj5u.com熱心網友回復:
我這邊寫錯了 你換成>= 你給一下表資料量和結果集
uj5u.com熱心網友回復:
沒執行計劃,沒資料環境,在這里討論SQL優化,沒有依據,因此,也沒多大意義。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/31406.html
標籤:開發
上一篇:備份資料表匯入少表之mysql
