达梦函数索引网关密文索引机制测试虚拟列测试

2024-05-29 20:32

本文主要是介绍达梦函数索引网关密文索引机制测试虚拟列测试,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!


### 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');
          

这篇关于达梦函数索引网关密文索引机制测试虚拟列测试的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1014566

相关文章

C++中assign函数的使用

《C++中assign函数的使用》在C++标准模板库中,std::list等容器都提供了assign成员函数,它比操作符更灵活,支持多种初始化方式,下面就来介绍一下assign的用法,具有一定的参考价... 目录​1.assign的基本功能​​语法​2. 具体用法示例​​​(1) 填充n个相同值​​(2)

MySql基本查询之表的增删查改+聚合函数案例详解

《MySql基本查询之表的增删查改+聚合函数案例详解》本文详解SQL的CURD操作INSERT用于数据插入(单行/多行及冲突处理),SELECT实现数据检索(列选择、条件过滤、排序分页),UPDATE... 目录一、Create1.1 单行数据 + 全列插入1.2 多行数据 + 指定列插入1.3 插入否则更

PostgreSQL中rank()窗口函数实用指南与示例

《PostgreSQL中rank()窗口函数实用指南与示例》在数据分析和数据库管理中,经常需要对数据进行排名操作,PostgreSQL提供了强大的窗口函数rank(),可以方便地对结果集中的行进行排名... 目录一、rank()函数简介二、基础示例:部门内员工薪资排名示例数据排名查询三、高级应用示例1. 每

全面掌握 SQL 中的 DATEDIFF函数及用法最佳实践

《全面掌握SQL中的DATEDIFF函数及用法最佳实践》本文解析DATEDIFF在不同数据库中的差异,强调其边界计算原理,探讨应用场景及陷阱,推荐根据需求选择TIMESTAMPDIFF或inte... 目录1. 核心概念:DATEDIFF 究竟在计算什么?2. 主流数据库中的 DATEDIFF 实现2.1

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

浅谈mysql的not exists走不走索引

《浅谈mysql的notexists走不走索引》在MySQL中,​NOTEXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引,下面就来介绍一下mysql的notexists走不走索... 在mysql中,​NOT EXISTS子句是否使用索引取决于子查询中关联字段是否建立了合适的索引。以下

Android ClassLoader加载机制详解

《AndroidClassLoader加载机制详解》Android的ClassLoader负责加载.dex文件,基于双亲委派模型,支持热修复和插件化,需注意类冲突、内存泄漏和兼容性问题,本文给大家介... 目录一、ClassLoader概述1.1 类加载的基本概念1.2 android与Java Class

MySQL 中的 CAST 函数详解及常见用法

《MySQL中的CAST函数详解及常见用法》CAST函数是MySQL中用于数据类型转换的重要函数,它允许你将一个值从一种数据类型转换为另一种数据类型,本文给大家介绍MySQL中的CAST... 目录mysql 中的 CAST 函数详解一、基本语法二、支持的数据类型三、常见用法示例1. 字符串转数字2. 数字

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客

Spring事务传播机制最佳实践

《Spring事务传播机制最佳实践》Spring的事务传播机制为我们提供了优雅的解决方案,本文将带您深入理解这一机制,掌握不同场景下的最佳实践,感兴趣的朋友一起看看吧... 目录1. 什么是事务传播行为2. Spring支持的七种事务传播行为2.1 REQUIRED(默认)2.2 SUPPORTS2