Oracle序列和索引

序列和索引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.什麼狀況下符合建立索引的條件:

  • 在常常須要搜索的列上,能夠加快搜索的速度。
  • 在做爲主鍵的列上,強制該列的惟一性和組織表中數據的排列結構。
  • 在常常用在鏈接的列上,這些列主要是一些外鍵,能夠加快鏈接的速度。
  • 在常常須要根據範圍進行搜索的列上建立索引,由於索引已經排序,其指定的範圍是可見的,速度要快。
  • 在常用where子句的列上面建立索引,加快條件的判斷速度。

3.什麼狀況下不該該建立索引:

  • 不多查詢的列,只是做爲參考的列,不該該建立索引。
  • 對於那些數值不多的列。
  • 對於那些定義爲blob數據類型(大數據)的列。
  • 常常增刪改的列,建立索引需謹慎。

4.索引的優勢。

  • 經過建立惟一性索引,能夠保證數據庫表中沒一行數據的惟一性。
  • 能夠大大的加快數據的檢索速度,也是建立索引的最主要的緣由。
  • 能夠加快表和表的鏈接,特別是在實現數據的參照完整性方面特別有意義。
  • 在使用分組和排序子句進行數據檢索時,一樣能夠顯著減小查詢中分組和排序的時間。
  • 經過使用檢索,能夠在查詢的過程當中,使用優化隱藏器,提升系統的性能。

5.索引的缺點。

  • 建立索引和維護索引要耗費時間,這種時間隨着數據量的增長而增長。
  • 索引須要佔物理空間,除了數據表佔數據空間以外,每個索引還要佔必定的物理空間。
  • 當對錶中的數據進行增刪改的時候,索引也要動態的維護,這樣就下降了數據的維護速度。

6.建立索引。

  •   建立B-Tree索引:

  語法:                                語法分析:

  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);

 

  什麼狀況下建立位圖索引:

  1. 列包含較大範圍的值
  2. 列包含大量空值
  3. 在where子句或者鏈接條件中頻繁使用一個列或者多個列
  4. 表至關的大,可是預計的多數查詢檢索的行數佔總行數的比例較小,如佔百分之十如下。
  •     四個索引的總結。
  B樹

      默認的索引類型,平衡樹索引,適用於高基數(不一樣值的程度高)的列。除非有特殊緣由須要使用不一樣的索引類型或功能,不然用正常的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;
相關文章
相關標籤/搜索