1. 程式人生 > >oracle的序列化和索引查詢

oracle的序列化和索引查詢

-- oracle的序列化 一組有序有規則的數字,常常用來做為表的id(oracle中主鍵沒有自增長)


  --sequence語法 create sequence 序列名稱 
    start with n  從n開始
    increment by i 每次增長i,相當於步長
    minvalue  最小值
    maxvalue 最大值
    cycle/ nocycle 迴圈/不迴圈
    cache 10,意思是遊標跳到當前步時候,往後快取10步.
    currval 當前的值 (遊標最開始預設的位置是-1,所以在使用前呼叫一次nextval)
    nextval 下一個值.
    
    create sequence mysequence 
    start with 1 increment by 2 minvalue 1 maxvalue 9 cache 5 cycle;
    select mysequence.nextval from dual;
    select mysequence.currval from dual; -- 1,3,5,7,9
   
   --實際開發中我們都是寫下面的,給的是預設值, 
    create sequence se2;
    create table tb (
     se2NUM varchar2(20),
     NUM varchar2(20)
    );
    -- 我們先利用這個序列來往一個表中插入大量資料,為後面的索引查詢做準備
    declare
    begin
      for i in 0..5000000 loop
        insert into tb values('tb'||se2.nextval,'tb'||i);
     end loop;
        commit;
      end;
      
      
     -- 索引
      
    --查詢這500萬條資料中的某一條,我們就要用索引  --- create index on 表名 (列名)
      1,--單列索引的使用
    select * from tb where tb.num = 'tb'||250000;--這是不用索引(我的電腦用了,26,458毫秒)
    create index index1 on tb (num);
    select * from tb where tb.num ='tb'||250000;--(0.089毫秒,這查詢效率)
    -----------------------------------------------------------------------------------
    2,多列索引的使用,效率更高
    select * from tb where tb.se2num='tb'||400000 and tb.num='tb'||400000;--未使用多列索引(5,872)
    
    create index index2 on tb(se2num,num);
     select * from tb where tb.se2num='tb||400000' and tb.num='tb||400000';--建立了雙列索引後查詢的()