本文整理同義詞創建權限、作用域、屏蔽對象所有者機制,以及三類索引 (B-Tree、反向鍵、位圖) 的適用場景、創建語法與存儲原理,附帶實戰代碼模板。
-- SYS/SYSTEM 執行 GRANT CREATE SYNONYM TO test_user; GRANT CREATE PUBLIC SYNONYM TO test_user; -- 公共同義詞需額外權限
CREATE PUBLIC SYNONYM public_sy_test1 FOR gcs95.test1;
PUBLIC 為特殊命名空間。SELECT * FROM public_sy_test1。DROP SYNONYM sy_test1; DROP PUBLIC SYNONYM public_sy_test1;
| 索引類型 | 結構特點 | 適用場景 | 不適用場景 | 創建語法關鍵字 |
|---|---|---|---|---|
| B-Tree (默認) | 平衡樹,葉節點存 ROWID,支持範圍掃描、排序 | 高基數列、主鍵、外鍵、範圍查詢 (>, <, BETWEEN)、ORDER BY | 極低基數列 (性別、狀態)、全表掃描更優時 | CREATE INDEX idx_name ON tbl(col) |
| 反向鍵索引 | 將鍵值字節順序反轉存儲 (123→321),分散熱塊 | 順序遞增主鍵 (序列/時間戳) 高並發 INSERT 熱塊爭用 | 範圍查詢 (反序破壞順序)、LIKE 'ABC%' | CREATE INDEX idx_name ON tbl(col) REVERSE |
| 位圖索引 | 不存 ROWID,存位圖映射 (每個值一個位圖),壓縮率高 | 低基數列 (性別、地區、狀態)、數據倉庫星型模型、多條件 AND/OR 組合 | 高並發 DML 環境 (鎖定粒度大、維護開銷巨大)、OLTP 核心表 | CREATE BITMAP INDEX idx_name ON tbl(col) |
-- 1. 建表示例 CREATE TABLE Depositor ( actid NUMBER PRIMARY KEY, cardid NUMBER, lastname VARCHAR2(10), firstname VARCHAR2(10), balance NUMBER(10,2) ); -- 2. B-Tree 索引 (cardid 高基數,範圍查詢) CREATE INDEX cd_idx ON Depositor(cardid); -- 3. 反向鍵索引 (假設 cardid 為序列生成,INSERT 熱點) CREATE INDEX cd_idx_rev ON Depositor(cardid) REVERSE; -- 4. 位圖索引 (假設新增 status 列,值集合小) ALTER TABLE Depositor ADD status VARCHAR2(10); CREATE BITMAP INDEX status_bmx ON Depositor(status); -- 5. 查詢驗證 (cardid 範圍) SELECT * FROM Depositor WHERE cardid BETWEEN 1 AND 100000;
原文提及表分區但未展開。核心點:
ORA-01775。WHERE id > 1000 無法使用反向索引,需權衡 INSERT 性能與查詢靈活性。