优化前分析

1、DDL

  1. CREATE TABLE `risk_third_data` (
  2. `id_card` char(20) NOT NULL COMMENT '身份证号码',
  3. `mobile` char(11) NOT NULL COMMENT '手机号码',
  4. `name` varchar(100) DEFAULT NULL COMMENT '姓名',
  5. `json_data` text COMMENT 'json数据',
  6. `json_data2` text COMMENT '在网json数据',
  7. `format_data` text COMMENT '可视化数据',
  8. `format_data2` text COMMENT '在网时长',
  9. `advice` varchar(100) DEFAULT NULL COMMENT '建议',
  10. `score` int(10) DEFAULT NULL COMMENT '分数',
  11. `status` tinyint(1) unsigned DEFAULT '1' COMMENT '风控来源',
  12. `query_num` smallint(4) unsigned DEFAULT '1' COMMENT '查询次数',
  13. `last_query_at` int(10) unsigned DEFAULT NULL COMMENT '最后请求时间',
  14. `hst_query_list` text COMMENT '历史查询记录',
  15. UNIQUE KEY `id_card` (`id_card`,`mobile`)
  16. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='顶象风控查询';

2、数据量

33W+(均行长41KB)

3、字段分析

  • id_card、mobile、name:调取风控接口请求参数
  • json_data:接口返回风控数据
  • json_data2:在网时长接口返回数据
  • format_data、format_data2:接口返回的json数据格式化后的html元素,使用频率不高
  • advice:风控建议,取自json_data.RiskStrategy.final_decision,使用频率不高且可直接从json_data获取
  • score:风控分数,取自json_data.RiskStrategy.Rule.weight,使用频率不高且可直接从json_data获取
  • status:暂无意义,固定值为1,但该表只记录丁象风控数据
  • query_num:暂无使用处
  • last_query_at:使用频率高,用于判断上次请求数据是否过时
  • hst_query_list:无使用场景且字段占用空间大

优化方案

1、拆表方式:垂直分表

2、优化字段:

  • format_data、format_data2:该字段信息可直接通过json_data数据格式化返回,建议移除字段或移至新表
  • hst_query_list:移至新表

    3、优化后DDL

    1. CREATE TABLE `risk_third_data` (
    2. `id_card` char(20) NOT NULL COMMENT '身份证号码',
    3. `mobile` char(11) NOT NULL COMMENT '手机号码',
    4. `name` varchar(100) DEFAULT NULL COMMENT '姓名',
    5. `json_data` text COMMENT 'json数据',
    6. `json_data2` text COMMENT '在网json数据',
    7. `advice` varchar(100) DEFAULT NULL COMMENT '建议',
    8. `score` int(10) DEFAULT NULL COMMENT '分数',
    9. `status` tinyint(1) unsigned DEFAULT '1' COMMENT '风控来源',
    10. `query_num` smallint(4) unsigned DEFAULT '1' COMMENT '查询次数',
    11. `last_query_at` int(10) unsigned DEFAULT NULL COMMENT '最后请求时间',
    12. UNIQUE KEY `id_card` (`id_card`,`mobile`)
    13. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='顶象风控查询';
    1. CREATE TABLE `risk_third_data_base` (
    2. `id_card` char(20) NOT NULL COMMENT '身份证号码',
    3. `mobile` char(11) NOT NULL COMMENT '手机号码',
    4. `hst_query_list` text COMMENT '历史查询记录',
    5. UNIQUE KEY `id_card` (`id_card`,`mobile`)
    6. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 ROW_FORMAT=DYNAMIC COMMENT='顶象风控查询额外信息表';