Oracle 直接按照時段查詢只需要0.06s,假如order by 時間后需要60S
資料庫已經運行一年了,之前都是正常的
網上查詢說有可能是TEMP空間滿了,壓縮后依然沒有效果,資料庫日志檔案沒有報錯,求大神指導
uj5u.com熱心網友回復:
group by,order by都一樣,需要回傳所有資料才能分組或者排序(有特例,比如order by之后的分頁可能不需要),你按照時間段查詢,是因為客戶端自作主張地給你沒有回傳所有資料,所以快。uj5u.com熱心網友回復:
資料總量有多少呢?排序欄位上有沒有索引?uj5u.com熱心網友回復:
總資料量三千多萬條,排序欄位上沒有索引,在帶索引的欄位上排序分組也是一樣慢uj5u.com熱心網友回復:
還有一個同樣的資料庫,同樣的查詢條件,速度很快uj5u.com熱心網友回復:
這個庫和慢的庫,資料量是否一樣?滿足時間條件的資料量是否一致?
如果都是,那么就工具來輔助調查:
在你的sql里加入gather_plan_statistics提示,比如:select /*+gather_plan_statistics*/ ....
執行你的SQL之后,再跑如下命令把結果貼上來:
select * from table(dbms_xplan.display_cursor(null,null, 'last allstats'));
注意在執行你的SQL之后,到執行上述命令之間,不能執行其他任何SQL,另外,不要使用plsql developer,因為這個工具會隱含執行一些命令,影響輸出結果。
uj5u.com熱心網友回復:
此外,調優的時候除非你對oracle的優化器和體系架構較多的了解,最好不要拿不同的庫做比較,這會將問題復雜化,影響你解決問題的思路。uj5u.com熱心網友回復:
新手,求大神指導SQL> select * from table(dbms_xplan.display_cursor(null,null, 'last allstats'));
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
SQL_ID 2s422sp3b1fjg, child number 0
-------------------------------------
select /*+ gather_plan_statistics */* from thunder2019 where
datetime>to_Date('2019-10-16 15:00:00','yyyy-mm-dd hh24:mi:ss') order
by datetime desc
Plan hash value: 2282267311
--------------------------------------------------------------------------------
------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
| Id | Operation | Name | Starts | E-Rows | A-Rows | A-Time
| Buffers | Reads | OMem | 1Mem | Used-Mem |
--------------------------------------------------------------------------------
------------------------------------------------
| 0 | SELECT STATEMENT | | 1 | | 0 |00:00:30.90
| 486K| 486K| | | |
| 1 | SORT ORDER BY | | 1 | 5397 | 0 |00:00:30.90
| 486K| 486K| 1024 | 1024 | |
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
|* 2 | TABLE ACCESS FULL| THUNDER2019 | 1 | 5397 | 0 |00:00:30.90
| 486K| 486K| | | |
--------------------------------------------------------------------------------
------------------------------------------------
Predicate Information (identified by operation id):
---------------------------------------------------
PLAN_TABLE_OUTPUT
--------------------------------------------------------------------------------
2 - filter("DATETIME">TO_DATE(' 2019-10-16 15:00:00', 'syyyy-mm-dd hh24:mi:ss
'))
Note
-----
- dynamic sampling used for this statement (level=2)
已選擇25行。
uj5u.com熱心網友回復:
從這個執行計劃來看,這只是純粹的datetime欄位沒有索引,在這個欄位上創建個索引吧。。。uj5u.com熱心網友回復:
另外說下,這里你選擇的時間條件要獲取的是今天15:00之后的資料,如果這個時間條件往前提,你要獲取一個月,甚至一年的資料的話,那么索引可能也解決不了你的性能問題。
uj5u.com熱心網友回復:
謝謝指導!加了索引多時間的排序效率提升了!uj5u.com熱心網友回復:
其實不是排序的問題,是過濾條件的問題。。。
uj5u.com熱心網友回復:
1、建議問優化問題時,提供SQL陳述句和相應的執行計劃,這樣,大家可以一目了然。轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/28124.html
標籤:基礎和管理
上一篇:sqlplus執行腳本時出現錯誤
