乙個分批取數優化例子

2021-05-22 01:36:00 字數 1000 閱讀 7906

乙個oracle分批取數優化例子:

allobj表是乙個100w的大表,需要對它進行分批取數:

通用分頁sql:

select * from (select a.*, rownum rn from (select * from allobj) a where rownum <= 10000) where rn > 5000

優點:1通用 2查詢前面幾頁的時候效能還不錯

缺點:表非常大時,查詢後幾頁效能比較差,如:

select * from (select a.*, rownum rn from (select * from allobj) a where rownum <= 500000) where rn > 495000

oracle會從硬碟讀取前50w條記錄再去掉前面的495000條,也就是說越到後面越接近於全表掃瞄了

所以必須對這個sql進行優化,當我們要獲取整個表的較少資料時,當然用索引比較快,應該盡量用到索引,還好allobj表有乙個唯一索引object_id,

那先對索引分批,再按索引取表裡的資料就會快多了,因此改寫如下:

先取出每一頁的最大id

select object_id maxid, rn / 5000 page

from (select object_id, rownum rn from (select object_id from allobj where object_id is not null order by object_id)) a

where mod(rn, 5000) = 0

然後select * from allobj where object_id > 1657966 and object_id <= 1662966

注意: 如果object_id是nullable,那麼select object_id from allobj 仍然會table access full, 因為索引裡不儲存null,所以要加個條件object_id is not null,這樣對索引分頁時只需要讀取索引,就很快了

隔數取乙個求和最大

1 17.16乙個有名的按摩師會收到源源不斷的預約請求,每個預約都可以選擇接或不接。在每次預約服務之間要有休息時間,因此她不能接受相鄰的預約。給定乙個預約請求序列,替按摩師找到最優的預約集合 總預約時間最長 返回總的分鐘數。示例 1 輸入 1,2,3,1 輸出 4 解釋 選擇 1 號預約和 3 號預...

php mysql 乙個查詢優化的簡單例子

php mysql是乙個最經常使用的 搭檔,它們倆配合使用,能夠發揮出最佳效能,當然,如果配合apache使用,就更加perfect了。因此,需要做好對mysql的查詢優化。下面通過乙個簡單的例子,展現不同的sql語句對於查詢速度的影響 存在這樣的一張表test,它有乙個自增的id作為主索引。現在要...

乙個cmd ftpscript 例子

乙個例子,每日自動更新norton病毒庫的 bat檔案 dir e software symantec viruslib sy exe pause ftp s cescript.txt rem e software symantec viruslib symcdefsx86.exe q copy e...