oracle千万级分页优化,oracle千万级数据分页存储过程优化
隨著數據量的增加,Oracle數據庫分頁存儲過程(使用rownum分頁)查詢性能越來越差,查詢時間也越來越長,于是優化勢在必行,結合用戶一般使用特點(一般看前幾頁的較多),于是以此為切入點優化原先的存儲過程,在WHERE條件中增加rownum<=pageindex*pageSize,減少首次過濾的數據量,調整后的存儲過程如下:
CREATE OR REPLACE PACKAGE DotNet is
TYPE type_cur IS REF CURSOR; --定義游標變量用于返回記錄集
PROCEDURE DotNetPagination_New(Pindex in number, --分頁索引
Psql?? in varchar2, --產生dataset的sql語句
Psize? in number, --頁面大小
v_cur? out type_cur --返回當前頁數據記錄
);
procedure DotNetPageRecordsCount_New(Psqlcount in varchar2, --產生dataset的sql語句
Prcount?? out number --返回記錄總數
);
end DotNet_New;
CREATE OR REPLACE PACKAGE BODY DotNet is
PROCEDURE DotNetPagination(Pindex in number,
Psql?? in varchar2,
Psize? in number,
v_cur? out type_cur) AS
v_sql??? VARCHAR2(4000);
v_count? number;
v_Plow?? number;
v_Phei?? number;
v_Appsql varchar2(1000);
Begin
v_Phei?? := Pindex * Psize + Psize;
v_Plow?? := v_Phei - Psize + 1;
--優化的地方--------------
v_Appsql := '';
if (Pindex < 1000) then
v_Appsql := ' and rownum <= ' || v_Phei;
end if;
v_sql := 'select * from (' || Psql || v_Appsql ||
') where rn between ' || v_Plow || ' and ' || v_Phei;
----------------------------
--原方法v_sql := 'select * from (' || Psql ||? ') where rn between ' || v_Plow || ' and ' || v_Phei;
open v_cur for v_sql;
End DotNetPagination;
procedure DotNetPageRecordsCount(Psqlcount in varchar2,
Prcount?? out number) as
v_sql???? varchar2(4000);
v_prcount number;
begin
v_sql := 'select count(*) from (' || Psqlcount || ')';
execute immediate v_sql
into v_prcount;
Prcount := v_prcount;
end DotNetPageRecordsCount;
end DotNet;
總結
以上是生活随笔為你收集整理的oracle千万级分页优化,oracle千万级数据分页存储过程优化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java oracle 乐观锁,orac
- 下一篇: 修改oracle用户权限,详解如何实现O