①序列
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;