文档

加速密文索引(encdb_btree)

更新时间:

该插件是全密态数据库的性能增强插件,能够提高全密态数据库密文索引相关操作的效率,本文介绍如何使用该插件。

背景信息

全密态数据库提供了全链路加密的功能,在保证数据安全的同时,会损耗部分系统性能,具体损耗情况,请参见全密态数据库性能测试报告。因此,阿里云推出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