一個很普通的表,只有兩個欄位,一個是電話號碼,一個是ID集合,ID集合最多3000多的長度,現在想每天跑一次定時入快取,但是查詢出來速度很慢,200萬10分鐘不夠,導致資料庫連接超時,下面是sql,求問通過什么辦法能把時間縮短到1分鐘以內
select t2.* from( select rownum as rowindex,t.* from t_zzd_attention_job t)t2
where t2.rowindex>=#{begin} and t2.rowindex<#{end}
uj5u.com熱心網友回復:
貼個執行計劃吧,另外不建議使用rownum 作為檢索條件,可以新增一列作索參考uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
采用rownum是打算分批次查詢的uj5u.com熱心網友回復:
但是你的資料量很大,利用 rownum 走的是全表掃面。你可以新增一列,還是保存每行的序號,但是在該列上建立 index,這樣可以提高檢索速度,也可以達到分頁的效果
uj5u.com熱心網友回復:
用 rownum 做為過慮條件,最終得到的資料可能是不穩定的; 建議使用 row_number 函式,對主鍵(或唯一鍵)進行排序,再分頁;uj5u.com熱心網友回復:
樓主一下輸出200多萬條記錄干嘛?如果只是為了匯出,就用bcp或其它工具啊。
uj5u.com熱心網友回復:
一次200W,這個是資料倉庫嗎?uj5u.com熱心網友回復:
你這SQL慢的原因,主要是你分頁時每次都需要全表掃描,這個非常影響速度。優化的話,有兩個途徑:
1.在電話號碼欄位建立索引,根據電話號碼進行分頁查詢。但此方法不一定能夠從10多分鐘優化到1分鐘之內。
2.擴大資料庫記憶體和SGA區,一次性并行取出200萬全量資料,此方法應該可以在1分鐘內搞定。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/116395.html
標籤:高級技術
上一篇:千萬級大表如何更快速的創建索引
下一篇:為什么oracle靜默安裝建庫之后,生成的tnsname.ora 檔案service_name引數值用的是GDBNAME而不是SID?
