该插件是全密态数据库的性能增强插件,能够提高全密态数据库密文索引相关操作的效率,本文介绍如何使用该插件。
背景信息
全密态数据库提供了全链路加密的功能,在保证数据安全的同时,会损耗部分系统性能,具体损耗情况,请参见全密态数据库性能测试报告。因此,阿里云推出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
。