在創建 Bitmap Join Index (BJI) 時遇到 ORA-25954: 維的主鍵或唯一約束條件缺失 錯誤,核心原因在於唯一索引 ≠ 唯一約束。
CREATE TABLE sales AS SELECT * FROM sh.sales;
CREATE TABLE customers AS SELECT * FROM sh.customers;
CREATE UNIQUE INDEX CUST_ID_un ON customers(CUST_ID);
-- 創建 BJI 失敗
CREATE BITMAP INDEX sales_cust_gender_bjix
ON sales(customers.cust_gender)
FROM sales, customers
WHERE sales.cust_id = customers.cust_id;
-- 報錯:ORA-25954
-- 添加唯一約束(而非僅創建索引)
ALTER TABLE customers
MODIFY (cust_id CONSTRAINT customers_un UNIQUE);
-- 再次創建 BJI 即可成功
CREATE BITMAP INDEX sales_cust_gender_bjix
ON sales(customers.cust_gender)
FROM sales, customers
WHERE sales.cust_id = customers.cust_id;
-- 索引已創建
創建 Bitmap Join Index 時,維度表的連接鍵必須定義顯式的 PRIMARY KEY 或 UNIQUE CONSTRAINT。單純的 UNIQUE INDEX 無法滿足 BJI 的元數據驗證要求。
ALTER TABLE ... MODIFY (col CONSTRAINT name UNIQUE) 是添加約束的標準語法