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;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章