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

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

相关文章

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

Redis主从/哨兵机制原理分析

《Redis主从/哨兵机制原理分析》本文介绍了Redis的主从复制和哨兵机制,主从复制实现了数据的热备份和负载均衡,而哨兵机制可以监控Redis集群,实现自动故障转移,哨兵机制通过监控、下线、选举和故... 目录一、主从复制1.1 什么是主从复制1.2 主从复制的作用1.3 主从复制原理1.3.1 全量复制

Redis缓存问题与缓存更新机制详解

《Redis缓存问题与缓存更新机制详解》本文主要介绍了缓存问题及其解决方案,包括缓存穿透、缓存击穿、缓存雪崩等问题的成因以及相应的预防和解决方法,同时,还详细探讨了缓存更新机制,包括不同情况下的缓存更... 目录一、缓存问题1.1 缓存穿透1.1.1 问题来源1.1.2 解决方案1.2 缓存击穿1.2.1

Java如何通过反射机制获取数据类对象的属性及方法

《Java如何通过反射机制获取数据类对象的属性及方法》文章介绍了如何使用Java反射机制获取类对象的所有属性及其对应的get、set方法,以及如何通过反射机制实现类对象的实例化,感兴趣的朋友跟随小编一... 目录一、通过反射机制获取类对象的所有属性以及相应的get、set方法1.遍历类对象的所有属性2.获取

MySQL中的锁和MVCC机制解读

《MySQL中的锁和MVCC机制解读》MySQL事务、锁和MVCC机制是确保数据库操作原子性、一致性和隔离性的关键,事务必须遵循ACID原则,锁的类型包括表级锁、行级锁和意向锁,MVCC通过非锁定读和... 目录mysql的锁和MVCC机制事务的概念与ACID特性锁的类型及其工作机制锁的粒度与性能影响多版本

VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virtual disk”问题

《VMWare报错“指定的文件不是虚拟磁盘“或“Thefilespecifiedisnotavirtualdisk”问题》文章描述了如何修复VMware虚拟机中出现的“指定的文件不是虚拟... 目录VMWare报错“指定的文件不是虚拟磁盘“或“The file specified is not a virt

Oracle的to_date()函数详解

《Oracle的to_date()函数详解》Oracle的to_date()函数用于日期格式转换,需要注意Oracle中不区分大小写的MM和mm格式代码,应使用mi代替分钟,此外,Oracle还支持毫... 目录oracle的to_date()函数一.在使用Oracle的to_date函数来做日期转换二.日

oracle数据库索引失效的问题及解决

《oracle数据库索引失效的问题及解决》本文总结了在Oracle数据库中索引失效的一些常见场景,包括使用isnull、isnotnull、!=、、、函数处理、like前置%查询以及范围索引和等值索引... 目录oracle数据库索引失效问题场景环境索引失效情况及验证结论一结论二结论三结论四结论五总结ora

Spring使用@Retryable实现自动重试机制

《Spring使用@Retryable实现自动重试机制》在微服务架构中,服务之间的调用可能会因为一些暂时性的错误而失败,例如网络波动、数据库连接超时或第三方服务不可用等,在本文中,我们将介绍如何在Sp... 目录引言1. 什么是 @Retryable?2. 如何在 Spring 中使用 @Retryable

如何测试计算机的内存是否存在问题? 判断电脑内存故障的多种方法

《如何测试计算机的内存是否存在问题?判断电脑内存故障的多种方法》内存是电脑中非常重要的组件之一,如果内存出现故障,可能会导致电脑出现各种问题,如蓝屏、死机、程序崩溃等,如何判断内存是否出现故障呢?下... 如果你的电脑是崩溃、冻结还是不稳定,那么它的内存可能有问题。要进行检查,你可以使用Windows 11