序列和索引sql
一.序列數據庫
1.序列的概念:緩存
序列(Sequence)是用來生成連續的整數數據的對象。它經常用來做爲主鍵的增加列,能夠升序,也能夠降序。函數
2.建立序列:性能
語法:建立序列 語法解析:大數據
CREATE SEQUENCE sequence_name 優化
[STRAT WITH num] START WITH:從某一個整數開始,升序默認爲1,降序默認爲-1.spa
[INCREMENT BY increment] INCREMENT BY:增加數。若是是正數則升序生成,負數則降序生成。升序默認爲1,降序默認爲-1。對象
[MAXVALUE num | NOMAXVALUE] MAXVALUE:最大值。 NOMAXVALUE:最大值的默認選項,升序爲,10的27次冪,降序默認值爲-1。blog
[MINVALUE num | NOMINVALUE] MINVALUE:最小值。 NOMINVALUE:最小值的默認選項,升序爲1,降序爲-10的26次冪。
[CYCLE | NOCYCLE] CYCLE:表示升序達到最大值的時候,從最小值開始。若是是降序的話,達到最小值後,從最大值開始。
NOCYCLE:表示達到最大或最小值時,不從新開始。(會報錯)。默認爲NOCYCLE。
[CACHE num | NOCACHE] CACHE:使用CACHE選項時,該序列會根據序列規則生成一組序列號。保留在內存中,當使用下一個序列號時,能夠更快的響應。
當內存中的序列號用完時,系統會再次生成一組序列號保存在緩存中,這樣能夠提升生成序列號的效率。ORACLE會默認生成
20個序列號。
NOCACHE:不預先在內存中生成序列號。
示例:建立一個從5開始,每次增加3的序列,要求最大值爲1000,CYCLE,緩存區有30個預選序列號。
create sequence aa start with 5 increment by 3 maxvalue 1000 cycle cache 30;
3.利用序列:
序列建立以後,咱們能夠經過序列對象的CURRVAL和NEXTVAL兩個‘僞列’來訪問序列的當前值和下一個值。
select aa.nextval from dual;
select aa.currval from dual;
注意:當你剛建立好序列時,不能直接查看currval當前值,會報錯,由於你尚未從序列中取值,因此currval是不被識別的。先取值(nextval,第一次爲5),而後就能夠查看當前值了。
我先建立一個表:
create table bb( id int primary key name varchar2(30); );
利用上個序列插入給id插入數據:
insert into bb values(aa.nextval,'MIKE');
插入了id爲5,name爲MIKE的一條數據。
4.序列的刪除和修改:
alter sequence aa maxvalue 200;
修改aa序列的最大值爲200。其餘屬性照例便可。
drop sequence aa;
二:索引
1.索引的概念:
索引是與表關聯的可選結構。能夠建立索引加快對錶執行SQL語句的速度。就像書的索引能夠幫助咱們更快的查找信息同樣,Oracle中的索引也提供了一種更快的訪問數據的途徑。
2.什麼狀況下符合建立索引的條件:
3.什麼狀況下不該該建立索引:
4.索引的優勢。
5.索引的缺點。
6.建立索引。
語法: 語法分析:
CREATE [UNIQUE] INDEX index_name ON UNIQUE:意味着索引列中的值必須是惟一的。
table_name(column_name,[column_name...]) index_name:索引的名稱。
TABLESPACE tab_space; table_name:須要加索引的表名。
column_name:須要加索引的列(能夠加多個列,這樣的索引稱爲符合索引。)
tab_space:存貯索引的表空間。若是不指定的話,那麼索引將會存貯在用戶默認的表空間下。(出於性能緣由,能夠將索引存貯的表
空間和實際表存貯的表空間分開。管理員應該爲表和索引建立不一樣的表空間。)
示例:爲emp員工表的員工號和薪水建立索引。
create index empno_sal_index on emp(empno,sal);
注意:若是你所要建立的索引的列的值有重複的值,那麼就不能建立惟一索引。
若是我如今已經建立好了一個ename(員工姓名)列的索引,而如今想實現這樣的一條查詢語句。
select lower(ename) from emp;
那麼這條語句雖然能夠出來結果,可是卻沒有用到索引。這時咱們就須要建立函數索引以下:
create index ename_index on emp(lower(ename));
create bitmap index e_i on emp(ename);
什麼狀況下建立位圖索引:
默認的索引類型,平衡樹索引,適用於高基數(不一樣值的程度高)的列。除非有特殊緣由須要使用不一樣的索引類型或功能,不然用正常的B樹索引便可.
B樹索引的一種形式,用於強制執行列值的惟一性.常常與主鍵和惟一鍵約束一塊兒使用,但也能夠獨立於約束而建立
對於包含低基數列以及在SQL語句的WHERE子句中使用許多AND或OR運算符的數據倉庫環境,很是適合使用這種索引。
適用於應用了SQL函數的列。可與B樹索引類型或位圖索引類型結合使用
7.查看索引信息。
SELECT index_name, table_name, uniqueness, status FROM user_indexes WHERE table_name IN ('EMP');
這個語句實現了查詢索引名字,索引的表名,是不是惟一索引,索引的狀態(是否可用)。結果截圖以下:
INVALID的話就是當前索引不可用。
8.修改、刪除索引。
alter index ename_index rename to ei;
更改索引名,其餘修改格式都是如此。
drop index ei;