本文主要是介绍达梦函数索引网关密文索引机制测试虚拟列测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
### Code Reference
- URL:p119(函数索引) DM8 系统管理员手册 p189(explain sql)
- DESC:达梦函数索引&网关密文索引机制测试&虚拟列测试
- Last Update:2020-7-2 19:30
-
测试表加密
- 创建测试表
create table test1.tab_index_100W as select rownum as id,to_char(sysdate + rownum / 24 / 3600, 'yyyy-mm-dd hh24:mi:ss') as 办卡日期,trunc(18510911437-dbms_random.value(-100000, 100000)) as 电话号码,'TDE' || dbms_random.string('x', 20) 身份证号,'TDE' || dbms_random.string('x', 15) 银行卡号from dualconnect by level <= 1000000;alter table "TEST1"."TAB_INDEX_100W" add primary key("ID");
- 加密并授权
- 查询测试(全表扫描)
10.727s
select * from TEST1.TAB_INDEX_100W T where T.电话号码 = 18510911417
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7nqWCrDQ-1593710451660)(http://redevm/uploads/big/5227b791e14a28fed52b75eda5c7ee72.png)]
- 创建测试表
-
哈希值&索引测试
-
增加哈希特征列&初始化特征值
-
哈希算法
SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW('oracle'))封装系统自带的摘要算法为确定函数create or replace function test1."fun_md5"(pvb_str varchar2(1000))return varbinary(1000) deterministic asbeginreturn SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW(pvb_str));end;
-
增加摘要列
alter table "TEST1"."SS_ENC_TAB_1d9druqb54d" add column("hashValue" VARBINARY(100));
-
初始化摘要值
update "TEST1"."SS_ENC_TAB_1d9druqb54d" set "hashValue"=SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW(身份证号))
-
创建普通索引
create index idx_hash on "TEST1"."SS_ENC_TAB_1d9druqb54d" ("hashValue")
-
创建函数索引
drop index "TEST1".idx_funhash;create index idx_funhash on "TEST1"."SS_ENC_TAB_1d9druqb54d"(test1."fun_md5"(身份证号));函数索引表达式包含有非法的列类型、不确定性函数、非静态方法或集函数(封装函数后无法正常创建)
-
虚拟列
alter table "TEST1"."SS_ENC_TAB_1d9druqb54d" add column("virtualHash" varbinary(100) as (test1."fun_md5"(身份证号)));函数不能确定(封装函数后正常创建)
-
-
测试使用不同的查询方式的性能差异&执行计划
- 使用主键(1)
explain select * from "TEST1"."SS_ENC_TAB_1d9druqb54d" where ID in (251846,533081,533530,564719);
- 使用明文,未建索引(2)
explain select * from "TEST1"."SS_ENC_TAB_1d9druqb54d" where 身份证号 IN('TDE64BWJOD0Q2O9GD6M9GL0','TDEFTYV4YR5QSL5657CD4NY','TDEALCXOJUJITGOQESIYK6L','TDEKNNET2QSO3X6047M95JJ')
- 使用哈希列(3)
explain select * from "TEST1"."SS_ENC_TAB_1d9druqb54d" where "hashValue" in (SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW('TDE64BWJOD0Q2O9GD6M9GL0')),SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW('TDEFTYV4YR5QSL5657CD4NY')),SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW('TDEALCXOJUJITGOQESIYK6L')),SYS.DBMS_OBFUSCATION_TOOLKIT.MD5(utl_raw.CAST_TO_RAW('TDEQVQHEEKE8223NHHIN41V')));执行很慢,在虚拟列创建索引,报和函数索引相同错误。explain select * from "TEST1"."SS_ENC_TAB_1d9druqb54d" where "virtualHash" in (test1."fun_md5"(utl_raw.CAST_TO_RAW('TDE64BWJOD0Q2O9GD6M9GL0')),test1."fun_md5"(utl_raw.CAST_TO_RAW('TDEFTYV4YR5QSL5657CD4NY')),test1."fun_md5"(utl_raw.CAST_TO_RAW('TDEALCXOJUJITGOQESIYK6L')),test1."fun_md5"(utl_raw.CAST_TO_RAW('TDEQVQHEEKE8223NHHIN41V')));
- 使用哈希列计算出的值(2)
explain select * from "TEST1"."SS_ENC_TAB_1d9druqb54d" where "hashValue" in ('0x3ADF273B01AAC189DF86F6C476DFAB9F','0x512862544080D8845E370FDFF31C38E7','0x2DDC00C337BAA23088D22D8278E238C3','0x4FCBD80BE2D4373930773694355C63B3');
- 使用主键(1)
-
-
这篇关于达梦函数索引网关密文索引机制测试虚拟列测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!