達夢関数インデックス&ゲートウェイ密文インデックスメカニズムテスト&仮想列テスト

4314 ワード

### Code Reference
  • URL:p 119(関数インデックス)DM 8システム管理者マニュアルp 189(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 dual
      connect by level <= 1000000;
      alter table "TEST1"."TAB_INDEX_100W" add primary key("ID");                
    
  • 暗号化および認証
  • クエリーテスト(全表スキャン)10.727 s select*from TEST 1.TAB_INDEX_100 W T where T.電話番号=1851091417[外部リンク画像の転送に失敗し、ソース局に盗難防止チェーン機構がある可能性があり、画像を保存して直接アップロードすることを提案する(img-7 nqWcrDQ-153710451660)(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 as
      begin
        return 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'
      );