天天看點

oracle_序列、索引、同義詞



①序列

1.序列: 可供多個使用者用來産生唯一數值的資料庫對象

    自動提供唯一的數值

    共享對象

    主要用于提供主鍵值

    将序列值裝入記憶體可以提高通路效率

2.CREATE SEQUENCE 語句

CREATE SEQUENCE sequence

       [INCREMENT BY n]  --每次增長的數值

       [START WITH n]    --從哪個值開始

       [{MAXVALUE n | NOMAXVALUE}]

       [{MINVALUE n | NOMINVALUE}]

       [{CYCLE | NOCYCLE}]     --是否需要循環

       [{CACHE n | NOCACHE}];  --是否緩存登入

3.查詢序列

查詢資料字典視圖 USER_SEQUENCES 擷取序列定義資訊

SELECT sequence_name, min_value, max_value,

 increment_by, last_number

FROM user_sequences;

如果指定NOCACHE 選項,則列LAST_NUMBER 顯示序列中下一個有效的值

4.NEXTVAL 和 CURRVAL 僞列

NEXTVAL 傳回序列中下一個有效的值,任何使用者都可以引用

CURRVAL 中存放序列的目前值

NEXTVAL 應在 CURRVAL 之前指定 ,否則會報CURRVAL 尚未在此會話中定義的錯誤。

5.使用序列

将序列值裝入記憶體可提高通路效率

序列在下列情況下出現裂縫:

    復原

    系統異常

    多個表同時使用同一序列

如果不将序列的值裝入記憶體(NOCACHE), 可使用表 USER_SEQUENCES 檢視序列目前的有效值

6.修改序列

修改序列的增量, 最大值, 最小值, 循環選項, 或是否裝入記憶體

ALTER SEQUENCE dept_deptid_seq

               INCREMENT BY 20

               MAXVALUE 999999

               NOCACHE

               NOCYCLE;

修改序列的注意事項

    必須是序列的擁有者或對序列有 ALTER 權限

    隻有将來的序列值會被改變

    改變序列的初始值隻能通過删除序列之後重建序列的方法實作

7.删除序列

    使用 DROP SEQUENCE 語句删除序列

    删除之後,序列不能再次被引用

②索  引

1.索引:

    一種獨立于表的模式對象, 可以存儲在與表不同的磁盤或表空間中

    索引被删除或損壞, 不會對表産生影響, 其影響的隻是查詢的速度

    索引一旦建立, Oracle 管理系統會對其進行自動維護, 而且由 Oracle 管理系統決定何時使用索引。使用者不用在查詢語句中指定使用哪個索引

    在删除一個表時,所有基于該表的索引會自動被删除

    通過指針加速 Oracle 伺服器的查詢速度

    通過快速定位資料的方法,減少磁盤 I/O

2.建立索引

    自動建立: 在定義 PRIMARY KEY 或 UNIQUE 限制後系統自動在相應的列上建立唯一性索引

    手動建立: 使用者可以在其它列上建立非唯一的索引,以加速查詢

CREATE UNIUQE | BITMAP INDEX <schema>.<index_name>

       ON <schema>.<table_name>

            (<column_name> | <expression> ASC | DESC,

             <column_name> | <expression> ASC | DESC,...)

      TABLESPACE <tablespace_name>

      STORAGE <storage_settings>

      LOGGING | NOLOGGING

      COMPUTE STATISTICS

      NOCOMPRESS | COMPRESS<nn>

      NOSORT | REVERSE

      PARTITION | GLOBAL PARTITION<partition_setting>

相關說明

1)UNIQUE | BITMAP:指定UNIQUE為唯一值索引,BITMAP為位圖索引,省略為B-Tree索引。

2)<column_name> | <expression> ASC | DESC:可以對多列進行聯合索引,當為expression時即“基于函數的索引”

3)TABLESPACE:指定存放索引的表空間(索引和原表不在一個表空間時效率更高)

4)STORAGE:可進一步設定表空間的存儲參數

5)LOGGING | NOLOGGING:是否對索引産生重做日志(對大表盡量使用NOLOGGING來減少占用空間并提高效率)

6)COMPUTE STATISTICS:建立新索引時收集統計資訊

7)NOCOMPRESS | COMPRESS<nn>:是否使用“鍵壓縮”(使用鍵壓縮可以删除一個鍵列中出現的重複值)

8)NOSORT | REVERSE:NOSORT表示與表中相同的順序建立索引,REVERSE表示相反順序存儲索引值

9)PARTITION | NOPARTITION:可以在分區表和未分區表上對建立的索引進行分區

3.什麼時候建立索引

  以下情況可以建立索引:

    列中資料值分布範圍很廣

    列經常在 WHERE 子句或連接配接條件中出現

    表經常被通路而且資料量很大 ,通路的資料大概占資料總量的2%到4%

4.什麼時候不要建立索引

  下列情況不要建立索引:

    表很小

    列不經常作為連接配接條件或出現在WHERE子句中

    查詢的資料大于2%到4%

    表經常更新

注:索引不需要用,隻是說我們在用name進行查詢的時候,速度會更快。當然查的速度快了,插入的速度就會慢。因為插入資料的同時,還需要維護一個索引。

5.查詢索引

可以使用資料字典視圖 USER_INDEXES 和 USER_IND_COLUMNS 檢視索引的資訊

SELECT ic.index_name, ic.column_name,

 ic.column_position col_pos,ix.uniqueness

FROM user_indexes ix, user_ind_columns ic

WHERE ic.index_name = ix.index_name

AND ic.table_name = 'EMPLOYEES';

6.删除索引

使用DROP INDEX 指令删除索引

DROP INDEX index;

隻有索引的擁有者或擁有DROP ANY INDEX 權限的使用者才可以删除索引

删除操作是不可復原的

③同義詞-synonym

  使用同義詞通路相同的對象:

  友善通路其它使用者的對象

  縮短對象名字的長度

CREATE [PUBLIC] SYNONYM synonym

FOR    object;

1.建立和删除同義詞

為視圖DEPT_SUM_VU 建立同義詞

CREATE SYNONYM  d_sum

FOR  dept_sum_vu;

2.删除同義詞

DROP SYNONYM d_sum;