該插件是全密態數據庫的性能增強插件,能夠提高全密態數據庫密文索引相關操作的效率,本文介紹如何使用該插件。
背景信息
全密態數據庫提供了全鏈路加密的功能,在保證數據安全的同時,會損耗部分系統性能,具體損耗情況,請參見全密態數據庫性能測試報告。因此,阿里云推出encdb_btree插件,能夠有效提高全密態數據庫密文索引相關操作的效率。
前提條件
功能限制
該插件在功能上大部分已兼容B-Tree,但仍有部分功能不支持,具體如下:
不支持在創建
UNIQUE INDEX
時使用ON CONFLICT
語法。不支持使用
FOREIGN KEY
。
管理插件
創建插件
CREATE EXTENSION IF NOT EXISTS encdb; CREATE EXTENSION encdb_btree;
說明encdb_btree插件依賴encdb插件,請先創建并加載encdb插件。
卸載插件
DROP EXTENSION encdb_btree;
說明如果數據庫中存在未刪除的enc_btree索引,插件將會卸載失敗。需要手動執行DROP INDEX命令刪除已有的enc_btree索引后,再卸載插件。
您也可以通過DROP EXTENSION encdb_btree CASCADE;命令卸載插件,該方法會在不影響表數據的情況下,自動刪除所有已有的enc_btree索引。
使用方法
全密態數據庫定義加密表后,該插件支持為加密列創建enc_btree索引。
以如下加密表為例:
CREATE TABLE test(
t1 enc_int4,
t2 enc_int8,
t3 enc_text
);
您可以在加密表上通過USING enc_btree
關鍵字創建enc_btree索引:
CREATE INDEX ON test USING enc_btree (t1);
CREATE UNIQUE INDEX ON test USING enc_btree (t2);
CREATE INDEX ON test USING enc_btree (t1, t2, t3);
CREATE INDEX ON test USING enc_btree (t1 desc, t2 asc);
您在創建enc_btree索引后,無需更改業務SQL,全密態數據庫在處理SQL時會自動生成調用enc_btree的執行計劃,從而提高全密態數據庫密文索引相關操作的效率。
性能提升
請參見全密態數據庫性能測試報告
常見問題
Q:使用插件時報錯
ERROR: unexpected non-btree speculative unique index
如何處理?該插件暫不支持在創建
UNIQUE INDEX
時使用ON CONFLICT
語法。Q:使用插件時報錯
ERROR: only b-tree indexes are supported for foreign keys
如何處理?A:該插件暫不支持使用
FOREIGN KEY
。