“從序號中找到最小的未使用序號”演算法的改進(續)
SQL> create table t_num as select rownum rn from dba_objects t;
Table created
SQL> create index idx_t_num on t_num(rn);
Index created
SQL> set timing on
SQL> select max(rn) from t_num;
MAX(RN)
----------
71300
Elapsed: 00:00:00.01
SQL> delete t_num where rn=70000;
1 row deleted.
Elapsed: 00:00:00.01
SQL> commit;
Commit complete.
Elapsed: 00:00:00.01
SQL> select pkg_test.f_get_bh1('t_num','rn') from dual;
select pkg_test.f_get_bh1('t_num','rn') from dual
*
ERROR at line 1:
ORA-01013: user requested cancel of current operation
ORA-06512: at "DEMO.PKG_TEST", line 27
Elapsed: 00:05:33.02
執行了5分多鐘還沒結果,人為中斷了執行。
SQL> select pkg_test.f_get_bh2('t_num','rn') from dual;
PKG_TEST.F_GET_BH2('T_NUM','RN')
--------------------------------
70000
Elapsed: 00:00:00.09
缺號靠近結尾處,換個靠前的試一下:
SQL> delete t_num where rn=700;
1 row deleted.
Elapsed: 00:00:00.01
SQL> commit;
Commit complete.
Elapsed: 00:00:00.01
SQL> select pkg_test.f_get_bh1('t_num','rn') from dual;
PKG_TEST.F_GET_BH1('T_NUM','RN')
--------------------------------
700
Elapsed: 00:00:05.45
SQL> select pkg_test.f_get_bh2('t_num','rn') from dual;
PKG_TEST.F_GET_BH2('T_NUM','RN')
--------------------------------
700
Elapsed: 00:00:00.02
二個方法差別很大,與沒有索引的情況類似。
對錶和索引進行分析:
SQL> exec dbms_stats.gather_table_stats('DEMO','T_NUM');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.72
SQL> exec dbms_stats.gather_index_stats('DEMO','IDX_T_NUM');
PL/SQL procedure successfully completed.
Elapsed: 00:00:00.18
SQL> select pkg_test.f_get_bh1('t_num','rn') from dual;
PKG_TEST.F_GET_BH1('T_NUM','RN')
--------------------------------
700
Elapsed: 00:00:00.10
SQL> select pkg_test.f_get_bh2('t_num','rn') from dual;
PKG_TEST.F_GET_BH2('T_NUM','RN')
--------------------------------
700
Elapsed: 00:00:00.01
SQL> insert into t_num values (700);
1 row created.
Elapsed: 00:00:00.00
SQL> commit;
Commit complete.
Elapsed: 00:00:00.01
SQL> select pkg_test.f_get_bh1('t_num','rn') from dual;
PKG_TEST.F_GET_BH1('T_NUM','RN')
--------------------------------
70000
Elapsed: 00:00:12.69
SQL> select pkg_test.f_get_bh2('t_num','rn') from dual;
PKG_TEST.F_GET_BH2('T_NUM','RN')
--------------------------------
70000
Elapsed: 00:00:00.07
有了索引,效能有所提高,但差距依然很大。來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/81227/viewspace-720022/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- “從序號中找到最小的未使用序號”演算法的改進演算法
- vue 序號,翻頁時序號遞增Vue
- 序號格式化
- leedcode Excel 表列序號Excel
- 序號產生器合集
- web 頁面如何實現不同分組資料的連續序號?Web
- JN專案-序號問題
- [CareerCup] 9.3 Magic Index 魔法序號Index
- [轉]GridView自動序號View
- JAVA中取順序號 (轉)Java
- iReport中序號自增的實現
- 【原創】FileRecoveryAngel 演算法分析+序號產生器演算法
- Myeclipse 6.5 序號產生器Eclipse
- 每日一練(42):Excel表序號Excel
- Excel Sheet Column Number Excel表列序號Excel
- 將git版本號編譯程式序Git編譯
- 《淺談利用RSA演算法防止非法序號產生器的製作》演算法
- VB家庭課堂 v2.0的演算法和序號產生器演算法
- 進位專家註冊演算法分析及序號產生器C原始碼演算法原始碼
- 【效能技巧】使用DataReader[列序號]的方法讀取DataReader物件物件
- Navicat Premiumx64 使用序號產生器啟用REM
- SAP CRM One Order的事件序號產生器制事件
- winzip的通用序號產生器 (2千字)
- leetcode:171. Excel表列序號LeetCodeExcel
- 分享一個navicat序號產生器
- 全國電話通1.18 演算法分析+序號產生器演算法
- Windows系統切換工具 演算法分析+序號產生器Windows演算法
- QuickCD V1.0.4演算法分析+序號產生器原始碼UI演算法原始碼
- win10如何執行序號產生器_win10怎麼執行序號產生器Win10
- CmailServer3.2序號產生器改進版。序列號應是12位16進位制數字(0--9,a--f)。 (1千字)AIServer
- el-table翻頁序號不從1開始(已解決)
- 製作mIRC6.02序號產生器(給別人寫的初學者序號產生器教材) (14千字)
- SAP CRM呼叫中心裡的事件序號產生器制事件
- 給Repeater控制元件裡新增序號的5種方法控制元件
- 貼彩虹狗破解工具的序號產生器 (727字)
- 臨時檔案的順序和絕對檔案號
- dataTable.js使用總結(包含序號生成,懸浮框使用等)JS
- CSS ::marker 讓文字序號更有意思CSS