有一句蠻長的sql,查詢得非常慢,但是加了一句union all之后速度從六分鐘變成了十秒,但是我實在不理解為何會這樣。具體的sql陳述句如下圖

當我在該sql陳述句的B部分中加了一條無關緊要的union all之后,速度從上圖的六分鐘變成了十秒

這里A部分和B部分單獨拿出來查詢,速度都很快只用幾秒,當他們連接查詢的時候就變得非常慢,但是加了一句union all之后速度就提升了數十倍。實在搞不懂為何會這樣,求大神指導一下,左連接在從表里面加一句union all會使速度變快的原因
uj5u.com熱心網友回復:
請檢查這2個欄位的資料型別是什么? 如果不一致,可能導致A left join B時性能不佳.Db_Model.Rix_No
Db_Matrix.Rix_No
uj5u.com熱心網友回復:
兩個表的欄位型別是一樣的哦
uj5u.com熱心網友回復:
建議查看SQL實際執行計劃, 看主要成本在哪個環節.uj5u.com熱心網友回復:
兩個子查詢,再做關聯查詢后,應該有“謂詞推進”。uj5u.com熱心網友回復:
這件事情是發生在兩個資料庫中,這兩個資料庫里面的表結構都是一樣的,但里面的資料有或許差別
我將這兩個資料庫比作資料庫X和資料庫Y,當我將這句sql放在資料庫X中時,不加Union all他執行得也很快,但是將這句sql放在資料庫Y中,執行得就很慢,需要注意的是,X資料庫內的資料量要比Y資料庫的資料量要大,卻導致了資料量少的資料庫Y反而查詢更慢。且兩個不同資料庫相同的sql的執行計劃不一樣,后來我在資料庫Y的sql中加入union all之后,執行計劃就和資料庫X變得一樣了
不同資料庫,相同的表結構,同一sql陳述句的執行計劃不一樣
uj5u.com熱心網友回復:
你是在資料庫工具中執行的與吧,不加UNION ALL 的時候,是不是會有很多資料,查詢后,只顯示前邊的幾條。如果是加完UNION ALL后,是不是會顯示你加的那個UNION ALL 。uj5u.com熱心網友回復:
這不是oracle吧?在oracle下,你加個無關緊要的union all查詢不至于出現這種情況,除非是快取影響,從第一次幾分鐘到第二次第三次幾秒鐘是有可能的,但也與你加不加這個union all查詢無關
uj5u.com熱心網友回復:
這個是sql server不是oracle,sql server版塊太冷清了,所以移到oracle這邊問問
uj5u.com熱心網友回復:
在oracle我確實沒有遇到這種問題,這個是sql server
uj5u.com熱心網友回復:
這個是sql server,整個查詢陳述句只有兩百多資料,不加union all查詢出資料到所有資料加載完畢之后需要6分鐘,加了之后只有十幾秒,且加不加union all查詢出來的結果是一樣的
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/36490.html
標籤:高級技術
上一篇:Oracle資料庫
下一篇:oracle分批匯出問題
